【发布时间】:2021-04-21 21:07:15
【问题描述】:
我正在尝试制作分类交叉熵损失函数,以更好地理解其背后的直觉。 到目前为止,我的实现如下所示:
# Observations
y_true = np.array([[0, 1, 0], [0, 0, 1]])
y_pred = np.array([[0.05, 0.95, 0.05], [0.1, 0.8, 0.1]])
# Loss calculations
def categorical_loss():
loss1 = -(0.0 * np.log(0.05) + 1.0 * np.log(0.95) + 0 * np.log(0.05))
loss2 = -(0.0 * np.log(0.1) + 0.0 * np.log(0.8) + 1.0 * np.log(0.1))
loss = (loss1 + loss2) / 2 # divided by 2 because y_true and y_pred have 2 observations and 3 classes
return loss
# Show loss
print(categorical_loss()) # 1.176939193690798
但是我不明白函数在以下情况下应该如何返回正确的值:
-
y_pred中至少有一个数字是0或1,因为log函数返回-inf或0以及在这种情况下代码实现的样子 -
y_true中至少有一个数字是0,因为乘以0总是返回0,然后np.log(0.95)的值将被丢弃,以及在这种情况下代码实现应该是什么样子李>
【问题讨论】:
标签: python numpy machine-learning cross-entropy