如果我有一个形状为[batch_size, height, width, depth]
的图层的输出和另一个形状[depth]
的张量,我如何将第一个张量乘以第二个,使得每个切片沿着depth
方向乘以第二张量中的对应值。也就是说,如果第二张量是[4, 5, 6]
,那么乘法是:
tensor1[:, :, :, 0] * 4
tensor1[:, :, :, 1] * 5
tensor1[:, :, :, 2] * 6
另外,有没有这种乘法的名称,我不知道要搜索?谢谢!
答案 0 :(得分:4)
这很简单。只需乘以两个张量。例如:
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 :(得分: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]})
看起来有点奇怪,但似乎对我来说很好。我已经使用过2d张量,但是你可以将它扩展到你的情况。
答案 2 :(得分:0)
要回答你的第二个问题,“这种乘法是否有一个我不知道要搜索的名称?”,它是一种与广播相关的元素乘法。广播是指隐式复制张量元素以使其与元素操作中使用的第二张量兼容的操作。许多Tensorflow操作使用Numpy使用的相同广播方法,进一步描述here