下面是一个使用NumPy手写二分类交叉熵损失的代码,包括详细注释。我们将定义一个简单的函数来计算交叉熵损失,并使用main
函数来演示如何使用它。
import numpy as np
def binary_cross_entropy(y_true, y_pred):
"""
计算二分类交叉熵损失
参数:
y_true -- 真实标签,形状为 (n_samples, ),其中每个值都是 0 或 1
y_pred -- 预测概率,形状为 (n_samples, ),值范围在 0 和 1 之间
返回:
loss -- 二分类交叉熵损失的标量
"""
# 防止 log(0) 导致数值问题,使用 epsilon 限制预测概率的最小值
epsilon = 1e-15
y_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 loss
def 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
函数来计算损失。 - 打印计算结果。
运行这个代码将输出二分类交叉熵损失的值。