私はTheano dvector
に100要素を持っています。私はまた、5列と100行の行列を持っています(つまり、各列に100要素が入っています)。行列の各列にベクトルで要素を掛ける方法Theanoでは?
今、私はベクトルごとに各列の要素ごとの乗算を適用する必要があります。 Theanoでそれを行う正しい方法は何ですか?
私のベクトルを5回繰り返すことで新しい行列を作り、それを転置して、同じ形状の2つの行列を要素ごとに掛けるべきですか?私は、numpyのに必要な動作を実現することを学んだ
が
を追加して、私はちょうど1列と2次元配列として私のベクトルを宣言する必要があります。言い換えれば、 "行"ベクトルを "列"ベクトルに置き換える必要があります(または、水平方向ではなく垂直方向に値を書き込む必要があります)。この場合numpyは必要に応じてベクトル(列)をブロードキャストします(私の行列の各列には私のベクトル要素を賢く乗算します)。 Theanoはnumpyののこの動作を継承しないようにしかし、それはなります
X = T.dmatrix('X')
w = np.array([
[10.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 10.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 10.0, 0.0, 0.0]
], dtype=th.config.floatX)
w = np.transpose(w)
W = th.shared(w, name='W', borrow=True)
R = W + X
f = th.function([X], R)
x = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]])
print f(x)
これは私が取得エラーです:私は、次の中x
を定義する場合
ValueError: Input dimension mis-match. (input[0].shape[1] = 3, input[1].shape[1] = 1)
Apply node that caused the error: Elemwise{add,no_inplace}(W, X)
Toposort index: 0
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(5, 3), (5, 1)]
Inputs strides: [(8, 40), (8, 8)]
ちなみに、コードは動作します方法:
x = np.array([[1.0, 1.0, 1.0], [2.0, 2.0, 2.0], [3.0, 3.0, 3.0], [4.0, 4.0, 4.0], [5.0, 5.0, 5.0]])