下面是一个使用NumPy手写二分类交叉熵损失的代码,包括详细注释。我们将定义一个简单的函数来计算交叉熵损失,并使用main
函数来演示如何使用它。
import numpy as npdef binary_cross_entropy(y_true, y_pred):"""计算二分类交叉熵损失参数:y_true -- 真实标签,形状为 (n_samples, ),其中每个值都是 0 或 1y_pred -- 预测概率,形状为 (n_samples, ),值范围在 0 和 1 之间返回:loss -- 二分类交叉熵损失的标量"""# 防止 log(0) 导致数值问题,使用 epsilon 限制预测概率的最小值epsilon = 1e-15y_pred = np.clip(y_pred, epsilon, 1 - epsilon)# 计算交叉熵损失loss = -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))return lossdef main():# 定义真实标签和预测概率y_true = np.array([1, 0, 1, 0, 1]) # 真实标签y_pred = np.array([0.9, 0.1, 0.8, 0.3, 0.6]) # 预测概率# 计算交叉熵损失loss = binary_cross_entropy(y_true, y_pred)print(f"Binary Cross Entropy Loss: {loss}")if __name__ == "__main__":main()
代码解释
-
binary_cross_entropy
函数:- 输入:
y_true
:真实标签,值为0或1。y_pred
:预测概率,范围在0到1之间。
- 处理:
- 使用
np.clip
将y_pred
的值限制在一个非常小的范围内,以避免log(0)
带来的数值问题。 - 计算交叉熵损失公式。
- 使用
- 输出:返回计算得到的二分类交叉熵损失。
- 输入:
-
main
函数:- 创建一些示例数据,包括真实标签和预测概率。
- 调用
binary_cross_entropy
函数来计算损失。 - 打印计算结果。
运行这个代码将输出二分类交叉熵损失的值。