例如(我可以用Theano轻松做到这一点):
std_var = T.repeat(T.exp(log_var)[None, :], Mean.shape[0], axis=0)
对于TF,Mean的形状是(?, num),但log_var的形状是(num,)
我不知道如何在TensorFlow中实现同样的操作…
回答:
你可以使用shape
在评估时提取占位符的形状。然后简单地使用tile
来平铺张量。例如,对于:
num = 3p1 = tf.placeholder(tf.float32, (None, num))p2 = tf.placeholder(tf.float32, (num,))
操作如下:
op = tf.tile(tf.reshape(p2, [1, -1]), (tf.shape(p1)[0], 1))sess.run(op, feed_dict={p1:[[1,2,3], [4,5,6]], p2: [1,2,1]})
将会得到:
array([[ 1., 2., 1.], [ 1., 2., 1.]], dtype=float32)
然而,在大多数情况下,你实际上不需要这样做,因为你可以依赖TF操作的广播行为。例如:
op = tf.add(p1, p2)sess.run(op, feed_dict={p1:[[1,2,3], [4,5,6]], p2: [1,2,1]})
将会得到:
array([[ 2., 4., 4.], [ 5., 7., 7.]], dtype=float32)