我想知道TensorFlow队列以什么顺序提供数据(特别是当您有一个张量列表时)。在
例如,在这样的队列中:
fifo_q = tf.FIFOQueue(
capacity=10,
dtypes=[tf.string, tf.string]
shapes=[[], []])
如果我将这些列表排队:
^{pr2}$我希望dq1
,dq2
在第一次运行时为“1”,然后是“2”,“2”,依此类推。但事实并非如此。相反,当我运行以下代码时,我得到“1”、“2”,然后是“3”、“4”,以此类推,直到dq2
达到10,然后队列锁定。在
for x in range(6):
print('dq1:', sess.run(dq1))
print('dq2:', sess.run(dq2))
为什么会发生这种事而不是我所期望的?我使用这个来匹配训练示例和标签,但是有些训练示例和标签被跳过/偏移。只是在一个队列中交织文件名是更好的解决方案吗?不管怎样,我想理解这种行为。在
感谢任何帮助。在
TensorFlow队列允许您在单个操作中以原子方式对张量列表(更准确地说是固定长度元组)进行排队和出列。张量}是同一出列操作的输出,在本例中,这将从队列中删除两个张量的元组。对
dq1
和{sess.run(dq1)
或sess.run(dq2)
的每次调用都对应于出列操作的单独调用,但是在调用sess.run(dq1)
时,TensorFlow会丢弃另一个元组元素,因为在对sess.run()
的调用中没有显式地请求它。在解决方案是确保
dequeue()
操作的两个输出都在对sess.run()
的调用中消耗。例如,对程序的以下更改应产生您最初预期的结果:相关问题 更多 >
编程相关推荐