1つのベクトルが[1,2,3,4]で、もう1つが[1,2,3,4]であるとします。は[1、4、9、16]でなければなりません。私がこの2つのベクトルのドット積をtheanoに書きたいのであれば、どうすればScan
を使ってこれを達成できますか?スキャンを使ってtheanoの2つのベクトルのドット積を計算する方法
これは私のコードですが、結果は結果マトリックスの対角線として表示されます。
v1 = T.dvector('v1')
v2 = T.dvector('v2')
def myFunc(i, v1, v2, res):
subtensor = res[i]
return T.set_subtensor(subtensor, v1[i]*v2[i])
result, updates = theano.scan(fn=myFunc,
sequences=T.arange(v1.shape[0]),
non_sequences=[v1, v2],
outputs_info=v1
)
func = theano.function(inputs=[v1, v2], outputs=result, updates=updates)
vec1 = np.asarray([1,2,3,4])
vec2 = np.asarray([1,2,3,4])
vec3 = func(vec1, vec2)
print(vec3)
これが結果です:
[[ 1. 2. 3. 4.]
[ 1. 4. 3. 4.]
[ 1. 2. 9. 4.]
[ 1. 2. 3. 16.]]