如何增加不同形状的张量? (广播)

时间:2016-08-27 19:43:24

标签: tensorflow

我希望在形状[a,b,c]的张量中多个元素,每个在第三维中具有来自形状张量[a,b]的标量。

例如,

x = 
|[1,2][3,4][5,6]|
|[1,2][3,4][5,6]|
|[1,2][3,4][5,6]|

y = 
|0 0 1|
|1 0 0|
|0 1 0|

我想将x和y相乘得到:

res = 
|[0,0][0,0][5,6]|
|[1,2][0,0][0,0]|
|[0,0][3,4][0,0]|

你能告诉我任何实现这个目标的方法吗?

P.S:也许我可以y'y

y' =
|[0,0][0,0][1,1]|
|[1,1][0,0][0,0]|
|[0,0][1,1][0,0]|

然后我可以使用tf.mul()来获得结果。但是我没有找到任何以这种方式复制张量元素的东西。

1 个答案:

答案 0 :(得分:2)

你是对的,你可以使用tf.mul()。实际上,TensorFlow中的乘法运算处理broadcasting,因此您不需要创建另一个形状为[a, b, c]的向量。

要确保广播符合预期尺寸,您可以为第二个向量y添加第三个维度:

x = tf.random_normal([3, 3, 2])
y = tf.constant([[0., 0., 1.], [1., 0., 0.], [0., 1., 0.]])

y = tf.expand_dims(y, 2)  # y will now have a matching shape of [3, 3, 1]
res = tf.mul(x, y)

sess = tf.Session()
sess.run(res)