3

まず、私のコードは次のとおりです。

"""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' オブジェクトに属性 'T' がありません

ここで何が起こっているのかわかりません。この状況全体に対する私の理解は間違っていますか。私は Google Deep Learning コースを修了しようとしており、プログラムを実装することで Python ができると思っていましたが、間違っている可能性があります。私は現在、C や Java などの他の多くの言語を知っていますが、新しい構文は常に私を混乱させます。

4

2 に答える 2

1

コード内の変数の型と形状を確認する

xは 1 次元配列です。scoresは 2 次元 (3 行):

In [535]: x.shape
Out[535]: (80,)
In [536]: scores.shape
Out[536]: (3, 80)

softmax3 つの項目のリストを生成します。最初は数字の 0 で、残りは のような形状の配列xです。

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,)

入力softmaxと同じ形状 (この場合は(3,80).

num=np.exp(scores)
res = np.zeros(scores.shape)
for i in range(1,3):
    res[i,:]= num[i,:]/sum(num)

転置およびプロットできる 2 次元配列を作成します。

ただし、これを行ごとに行う必要はありません。の 1 行目をres0 にしてよろしいですか?

res = np.exp(scores)
res = res/sum(res)
res[0,:] = 0    # reset 1st row to 0?

の各行に対してベクトル化された操作を行っていたのにscores、全体に対してではなかったのはなぜですか?

于 2016-02-29T17:41:08.260 に答える