如何在 TensorFlow 中重复未知维度
How to repeat unknown dimension in TensorFlow
例如(我可以毫无问题地使用 Theano 做到这一点):
std_var = T.repeat(T.exp(log_var)[None, :], Mean.shape[0], axis=0)
wrt TF Mean 的形状为 (?, num),但 log_var 的形状为 (num,)
我不知道如何在 TensorFlow 中做同样的事情...
您可以使用 shape
在评估期间提取占位符的形状。然后简单地 tile
张量。例如,对于:
num = 3
p1 = 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)
例如(我可以毫无问题地使用 Theano 做到这一点):
std_var = T.repeat(T.exp(log_var)[None, :], Mean.shape[0], axis=0)
wrt TF Mean 的形状为 (?, num),但 log_var 的形状为 (num,)
我不知道如何在 TensorFlow 中做同样的事情...
您可以使用 shape
在评估期间提取占位符的形状。然后简单地 tile
张量。例如,对于:
num = 3
p1 = 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)