队列形状必须与dtypes具有相同的长度

时间:2017-11-14 23:58:39

标签: python numpy tensorflow

我试图初始化一个类似于我的numpy数组形状的FIFOQueue 但得到以下错误。

My - numpy array shape - (1,17428,3)

dtypes=[tf.float32,tf.float32,tf.float32]
print len(dtypes)
shapes=[1, 17428, 3]
print len(shapes)
q = tf.FIFOQueue(capacity=200,dtypes=dtypes,shapes=shapes)

ValueError: Queue shapes must have the same length as dtypes

1 个答案:

答案 0 :(得分:3)

documentation指定FIFOQueue的构造函数的参数是(强调我的):

  
      
  • dtypesDType个对象的列表。 dtypes的长度必须等于每个队列元素中的张量数。
  •   
  • shapes :(可选。)完全定义的TensorShape个对象列表,其长度与dtypesNone相同。
  •   

您指定为shapes的内容不是完全定义的TensorShape对象的列表。它是一个三维的列表,将被解释为一个TensorShape,导致shapes=[TensorShape([Dimension(1), Dimension(17428), Dimension(3)])]长度为1.要告诉构造函数您想要三个1D张量,您可以指定:

shapes=[tf.TensorShape(1), tf.TensorShape(17428), tf.TensorShape(3)]

然后q = tf.FIFOQueue(capacity=200,dtypes=dtypes,shapes=shapes)将运行,不会引发任何错误。