Trying to compute softmax values, getting AttributeError: 'list' object has no attribute 'T'
首先,我的代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | """Softmax.""" scores = [3.0, 1.0, 0.2] import numpy as np def softmax(x): """Compute softmax values for each sets of scores in x.""" num = np.exp(x) score_len = len(x) y = [0] * score_len for index in range(1,score_len): y[index] = (num[index])/(sum(num)) return y print(softmax(scores)) # Plot softmax curves import matplotlib.pyplot as plt x = np.arange(-2.0, 6.0, 0.1) scores = np.vstack([x, np.ones_like(x), 0.2 * np.ones_like(x)]) plt.plot(x, softmax(scores).T, linewidth=2) plt.show() |
现在看这个问题,我可以知道t是我列表的转置。但是,我似乎得到了错误:
AttributeError: 'list' object has no attribute 'T'
号
我不明白这是怎么回事。我对整个情况的理解是错误的吗?我正在努力通过谷歌深度学习课程,我想我可以通过实现程序来实现python,但我可能错了。我现在知道很多其他语言,如C和Java,但新的语法总是让我困惑。
如注释所述,由于列表没有
1 2 3 | num = np.exp(x) score_len = len(x) y = np.array([0]*score_len) |
必须指出的是,我们需要使用
查看代码中变量的类型和形状
1 2 3 4 | In [535]: x.shape Out[535]: (80,) In [536]: scores.shape Out[536]: (3, 80) |
号
1 2 3 4 5 6 7 8 9 | In [537]: s=softmax(scores) In [538]: len(s) Out[538]: 3 In [539]: s[0] Out[539]: 0 In [540]: s[1].shape Out[540]: (80,) In [541]: s[2].shape Out[541]: (80,) |
您是否希望
1 2 3 4 | num=np.exp(scores) res = np.zeros(scores.shape) for i in range(1,3): res[i,:]= num[i,:]/sum(num) |
。
创建可转置和打印的二维数组。
但你不应该一行一行地做。你真的希望
1 2 3 | res = np.exp(scores) res = res/sum(res) res[0,:] = 0 # reset 1st row to 0? |
你为什么要对每一行的