如何在TensorFlow中重复未知维度

时间:2016-09-02 17:15:45

标签: machine-learning tensorflow deep-learning theano

例如(我可以毫无问题地使用Theano):

std_var = T.repeat(T.exp(log_var)[None, :], Mean.shape[0], axis=0)

wrt TF Mean具有形状(?,num),但log_var具有形状(num,)

我不知道如何在TensorFlow中做同样的事情......

1 个答案:

答案 0 :(得分:1)

您可以使用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)