【发布时间】:2021-05-29 08:25:45
【问题描述】:
我正在尝试遵循this repository 中概述的多层感知器的实现:
在查看它的交叉熵实现时,我注意到它被定义为:
class CrossEntropy(Loss):
...
def loss(self, y, p):
# Avoid division by zero
p = np.clip(p, 1e-15, 1 - 1e-15)
return - y * np.log(p) - (1 - y) * np.log(1 - p) # What's the part after the first np.log(p)?
def gradient(self, y, p):
# Avoid division by zero
p = np.clip(p, 1e-15, 1 - 1e-15)
return - (y / p) + (1 - y) / (1 - p)
在我的理解中,交叉熵是-y * log(p),如果我对其求导,则-(y / p),y为真值,p为预测值
因此,当我看到这个实现有一个额外的 - (1 - y) * log(1 - p) 时,我有点困惑,而且派生类也发生了变化。
这个附加部分是什么,它的用途是什么?
【问题讨论】:
-
-y * log(p)仅适用于二进制分类的特殊情况;另一个等式是多类的一般情况。
标签: python numpy machine-learning loss-function