
第 4章 神经网络的学习
88
如图4
-
3 所示,x 等于1 时,y 为0;随着 x 向0 靠近,y 逐渐变小。因此,
正确解标签对应的输出越大,式(4.2)的值越接近0;当输出为1 时,交叉熵
误差为0。此外,如果正确解标签对应的输出较小,则式(4.2)的值较大。
下面,我们来用代码实现交叉熵误差。
def cross_entropy_error(y, t):
delta = 1e-7
return -np.sum(t * np.log(y + delta))
这里,参数
y
和
t
是
NumPy
数组。函数内部在计算
np.log
时,加上了一
个微小值
delta
。这是因为,当出现
np.log(0)
时,
np.log(0)
会变为负无限大
的
-inf
,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个
微小值可以防止负无限大的发生。下面,我们使用
cross_entropy_error(y, t)
进行一些简单的计算。
>>> t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
>>> y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
>>> cross_entropy_error(np.array(y), np.array(t))
0.51082545709933802
>>>
>>> y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
>>> cross_entropy_error(np.array(y), ...