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计算
当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