转载: https://zhuanlan.zhihu.com/p/279142777
神经网络的多个输出是难于直观理解的,因可能的取值范围不同难以直接进行比较和反向传播。需要借助softmax将值压缩到(0,1)的开区间,从而简化学习过程。softmax函数可用一下公式表示:
其中,k表示神经网络的多个输出或类别数,v为输出向量, vj为 v中第j个输出或类别的值,i表示当前需要计算的类别,计算结果在0到1之间,且所有类别的softmax值求和为1。
import numpy as np
z = np.array([1.0, 2.0, -3.0, 4.0, 0.5, 0.6])
print(np.exp(z)/sum(np.exp(z)))
#[3.98422484e-02 1.08302460e-01 7.29736235e-04 8.00252952e-01 2.41655452e-02 2.67070578e-02]
进行函数分类,直接找softmax之后最大值对应的类别就可以了。
那为什么不直接用神经网络的输出的最大值呢?直接用一个max函数搞定?因为这样会导致函数不可导,也就很难学习。
推导过程:
……
转载:https://zhuanlan.zhihu.com/p/279142777