剖析Keras源码之激活函数softmax

softmax

keras.activations.softmax(x, axis=-1)

softmax计算公式:

  • 作用

放大数据之间的差距,让数据大的更大,比如[1,1,2]对应的结果为[0.21194156 0.21194156 0.57611688]

  • 参数说明:

  • x:张量 

  • ndim维度为x的维度:

当ndim = 1时:会报错(Cannot apply softmax to a tensor that is 1D.)

当ndim = 2时:直接输出softmax计算公式

当ndim > 2时:每个维度减去最大值后,输出softmax计算公式(据说是防止数据过大,出现异常,但不影响结果,可以公式证明)

  • axis:

当x的维度>2以上时的时候生效asix

理解很困难,建议直接看例子,然后自己在做几个试验一下

当axis = 0时:取一维空间的数据,进行softmax计算

扫描二维码关注公众号,回复: 10817804 查看本文章

当axis = 1时:取二维空间的数据,进行softmax计算

当axis = 2时:取三维空间的数据,进行softmax计算

上面说的很好记忆,但理解却非常抽象,下面见例子就好理解多了

例子

  • 理解axis=0(最难):

运算一(记住这个输出结果): 

x = np.array([1,3])
print(softmax(x))
# 输出:[0.11920292 0.88079708]

输入[1,3],输出 [0.11920292 0.88079708]

运算二: 

 

 图中将“1”和“3”进行softmax计算,然后输出[0.11920292 0.88079708],与运算一对应

 当axis=0时,相当于将2个(3*3)的矩阵对应位置的数据进行softmax计算

  • 理解axis=1(这个就简单了)

运算三

x = np.array([1,1,2])
print(softmax(x))
# 输出[0.21194156 0.21194156 0.57611688]

当axis=1时,相当于将单个(3*3)的矩阵竖着的位置的数据进行softmax计算

  • 理解axis=2:

与axis=1类似,只不过是将单个矩阵横着进行softmax计算,不举例了

另外:

 下面是用于例子证明的softmax公式代码:

def softmax(x,axis=-1):
    if axis == 1:
        raise ValueError('Cannot apply softmax to a tensor that is 1D. ')
    e = np.exp(x)
    s = np.sum([np.exp(i) for i in x])
    return e/s
发布了4 篇原创文章 · 获赞 1 · 访问量 3895

猜你喜欢

转载自blog.csdn.net/yuanyuneixin1/article/details/103753264