2016-09-11 5 views
0

형태가 [batch_size, height, width, depth]이고 다른 텐서 형태가 [depth] 인 레이어의 출력이있는 경우, depth 방향의 각 슬라이스에 두 번째 텐서의 해당 값이 곱해 지도록 두 번째 텐서를 곱하면됩니다. 또한임의의 축을 따라 곱하면?

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

, 이름 난을 검색 몰랐 곱셈의이 종류가있다 : 두 번째 텐서는, [4, 5, 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

올바른 축을 곱셈에 사용하면'깊이 '를'[1, 1, 1, 3]'로 바꿀 수 있습니다. ('tf.expand_dims()'도 사용할 수 있습니다) –

+0

예, 동의합니다. 나의 예에서는 방송이 내재되어 있으므로 깊이 = tf.reshape (tf.constant ([4, 5, 6], dtype = tf.float32), 모양 = [1, 1, 1, 3] 더 명확해질 것입니다. – rvinas

1

이 두 번째 질문에 대답하려면, "나는 검색 몰랐다 곱셈 이런 종류의 이름이 무엇입니까?", 그것은 방송과 요소 현명한 곱셈이다. 방송이란 원소 단위의 작업에 사용 된 두 번째 텐서와 호환되도록 텐서의 원소를 암시 적으로 복제하는 연산을 말합니다. 많은 Tensorflow 작업은 Numpy에서 사용한 동일한 방송 방법을 사용합니다. 자세한 내용은 here

관련 문제