Tensorflow 平铺张量的张量流形状

Tensorflow 平铺张量的张量流形状,tensorflow,Tensorflow,我有一个维度为(1,5)的变量a,我想将其“平铺”为我的小批量大小的两倍。例如,如果最小批量大小是32,那么我想构造一个维度(32,5)的张量c,其中每行的值与原始(1,5)变量a相同 但我只知道运行时的小批量大小:它是占位符b:tf.shape(b)[0] 下面是我构造c的代码: a = tf.Variable(np.random.uniform(size=(1,5))) b = tf.placeholder(shape=[None, 12], dtype=tf.float32) batch

我有一个维度为(1,5)的变量
a
,我想将其“平铺”为我的小批量大小的两倍。例如,如果最小批量大小是32,那么我想构造一个维度(32,5)的张量
c
,其中每行的值与原始(1,5)变量
a
相同

但我只知道运行时的小批量大小:它是占位符
b
tf.shape(b)[0]

下面是我构造c的代码:

a  = tf.Variable(np.random.uniform(size=(1,5)))
b = tf.placeholder(shape=[None, 12], dtype=tf.float32)
batch_size = tf.shape(b)[0]
c = tf.tile(a, tf.pack([batch_size, 1]))
这个很好。但是
c.get_shape()
返回(?,)。我不明白为什么它没有返回(?,5)

当我构造一个列数为c的矩阵变量
W
时,这会在我的代码中引起一个问题。get_shape()[1]我希望返回5而不是


任何帮助都将不胜感激。谢谢。

[编辑:这是2016年8月10日在to TensorFlow中修复的。]

这是TensorFlow的形状推断的一个已知限制:当
参数乘以是一个计算值(如此处的结果)时,它的值在图形构造时不是可计算的(在这种情况下,因为它依赖于a,而a在馈送之前没有值),当前形状推断将举手并声明形状未知(但与输入相同,
a

当前的解决方法是使用,它允许作为程序员的您在知道比形状推断更多的信息时提供额外的形状信息。例如,您可以执行以下操作:

a = tf.Variable(np.random.uniform(size=(1, 5)))
b = tf.placeholder(shape=[None, 12], dtype=tf.float32)
batch_size = tf.shape(b)[0]
c = tf.tile(a, tf.pack([batch_size, 1]))
c.set_shape([None, a.get_shape()[1]])  # or `c.set_shape([None, 5])`

但是,我们最近添加了一些功能,可以传播部分计算的值,这些值可以用作形状,这可以用来帮助
tf.tile()
的形状函数。我已经创建了一个跟踪此问题的程序,现在正在测试一个修复程序。

哪个版本?在0.10rc中解决了类似的问题。此外,您还可以使用set_shape作为解决方法谢谢,set_shape可以完成这项工作。是版本0.8.0rc0。解决方案完成了这项工作。非常感谢,特别是对于详细的解释。请注意,
pack
已被
stack