我正在尝试将 softmax 函数应用于 numpy 数组。但我没有得到想要的结果。这是我试过的代码:
import numpy as np
x = np.array([[1001,1002],[3,4]])
softmax = np.exp(x - np.max(x))/(np.sum(np.exp(x - np.max(x)))
print softmax
我认为 x - np.max(x)
代码没有减去每一行的最大值。需要从 x 中减去最大值以防止出现非常大的数字。
这应该是输出
np.array([
[0.26894142, 0.73105858],
[0.26894142, 0.73105858]])
但我得到:
np.array([
[0.26894142, 0.73105858],
[0, 0]])
最佳答案
max
或 sum
等“减少”操作所消耗的坐标轴的一种简便方法是使用 keepdims
关键字:
mx = np.max(x, axis=-1, keepdims=True)
mx
# array([[1002],
# [ 4]])
x - mx
# array([[-1, 0],
# [-1, 0]])
numerator = np.exp(x - mx)
denominator = np.sum(numerator, axis=-1, keepdims=True)
denominator
# array([[ 1.36787944],
# [ 1.36787944]])
numerator/denominator
# array([[ 0.26894142, 0.73105858],
[ 0.26894142, 0.73105858]])
关于python - 一个 numpy 数组的 Softmax 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43290138/