1

我有形状为 1 * n 的单热向量

v= [0.0, 1.0, 0.0] for n = 3

和形状为 n * m * r as( m 和 r 可以是任意数字,但第一维为 n) 的矩阵

m = [[[1,2,3,],[4,5,6]], [[5,6,7],[7,8,9]], [[2,4,7],[1,8,9]]]

我想使用广播机制对 a * b 进行倍增,这样只有与向量 v 中的1.0元素相对应的子矩阵保留在 v * m 的乘法中,所有其他子矩阵都变为零(因为所有其他元素在v) 如:

prod = [[[0,0,0],[0,0,0]], [[5,6,7],[7,8,9]] , [[0,0,0],[0,0,0]]]
4

1 回答 1

0

在 Tensorflow 中,您基本上希望将额外的维度添加到维度的末尾,否则广播发生在最后一个维度。所以这段代码就像你想要的那样工作:

import tensorflow as tf

sess = tf.Session()

v= [0.0, 1.0, 0.0]
vT = tf.expand_dims( tf.expand_dims( tf.constant( v, dtype = tf.float32 ), axis = -1 ), axis = -1 )
m = [[[1,2,3],[4,5,6]], [[5,6,7],[7,8,9]], [[2,4,7],[1,8,9]]]
mT = tf.constant( m, dtype = tf.float32 )
prodT = vT * mT
#prod = [[[0,0,0],[0,0,0]], [[5,6,7],[7,8,9]] , [[0,0,0],[0,0,0]]]

sess.run( prodT )

输出:

数组([[[0., 0., 0.], [0., 0., 0.]], [[5., 6., 7.], [7., 8., 9.]] , [[0., 0., 0.], [0., 0., 0.]]], dtype=float32)

于 2018-04-06T22:31:15.937 回答