2016-09-11 30 views
0

形状が[batch_size, height, width, depth]、テンソルが[depth]の層の出力を持つ場合、どのようにしてdepthに沿った各スライスに2番目のテンソルの対応する値が乗算されるように、最初のテンソルに2番目のテンソルを乗算できますか?二テンソルが[4, 5, 6]されれば、その後、乗算は次のとおりです。任意の軸に沿って掛け合っていますか?

tensor1[:, :, :, 0] * 4 
tensor1[:, :, :, 1] * 5 
tensor1[:, :, :, 2] * 6 

また、私が検索するために知らなかった乗算のこの種の名前はありますか?ありがとう!

答えて

0

私は、次のを作ってみた:

a = tf.placeholder(tf.float32, shape = [5, 2]) 
b = tf.placeholder(tf.float32, shape = 2) 

c = tf.concat(1, [tf.mul(x, y) for x, y in zip(tf.split(0, 2, b), tf.split(1, 2, a))]) 

sess = tf.Session() 
print sess.run(c, feed_dict = {a: np.ones([5, 2]), b: [5, 6]}) 

は少し奇妙に見えるが、私のために正常に動作するようです。私は2次元のテンソルを使ってきましたが、あなたもこれをあなたのケースに拡張することができます。

2

これは簡単です。両方のテンソルを乗算するだけです。たとえば:

import tensorflow as tf 

tensor = tf.Variable(tf.ones([2, 2, 2, 3])) 
depth = tf.constant([4, 5, 6], dtype=tf.float32) 
result = tensor * depth 

sess = tf.Session() 
sess.run(tf.initialize_all_variables()) 
print(sess.run(result)) 
+1

正しい軸が乗算に使用されていることを確認するだけで、 'depth 'を' [1,1,1,3] 'に変更できます。 ( 'tf.expand_dims()'も使用できます) –

+0

はい、私は同意します。私の例では放送が暗黙的なので、 'depth = tf.reshape(tf.constant([4,5,6]、dtype = tf.float32)、shape = [1,1,1,3]より明確になります。 – rvinas

1

はあなたの2番目の質問に答えるために、「私は検索するために知らなかった乗算のこの種の名前はありますか?」、それが放送に要素ごとの乗算です。ブロードキャストとは、要素単位の操作で使用される第2のテンソルと互換性を持たせるために、テンソルの要素を暗黙的に複製する操作を指します。多くのTensorflow操作では、Numpyが使用しているのと同じブロードキャスト方法を使用しています。詳細はhere

関連する問題