在https://classroom.udacity.com/courses/ud730/lessons/6370362152/concepts/63815621490923之后,我正在尝试编写一个“softmax”函数,当给定一个二维数组作为输入时,计算softmax每一列。我编写了以下脚本来测试它:
import numpy as np
#scores=np.array([1.0,2.0,3.0])
scores=np.array([[1,2,3,6],
[2,4,5,6],
[3,8,7,6]])
def softmax(x):
if x.ndim==1:
S=np.sum(np.exp(x))
return np.exp(x)/S
elif x.ndim==2:
result=np.zeros_like(x)
M,N=x.shape
for n in range(N):
S=np.sum(np.exp(x[:,n]))
result[:,n]=np.exp(x[:,n])/S
return result
else:
print("The input array is not 1- or 2-dimensional.")
s=softmax(scores)
print(s)
然而,结果“s”原来是一个零数组:
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
如果我在 for 循环中删除“/S”,则“未标准化”结果与我预期的一样;不知何故,“/S”除法似乎使所有元素都为零,而不是像我期望的那样将每个元素除以 S。代码有什么问题?