TensorFlow队列馈送ord

2024-06-01 03:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道TensorFlow队列以什么顺序提供数据(特别是当您有一个张量列表时)。在

例如,在这样的队列中:

fifo_q = tf.FIFOQueue(
              capacity=10,
              dtypes=[tf.string, tf.string]
              shapes=[[], []])

如果我将这些列表排队:

^{pr2}$

我希望dq1dq2在第一次运行时为“1”,然后是“2”,“2”,依此类推。但事实并非如此。相反,当我运行以下代码时,我得到“1”、“2”,然后是“3”、“4”,以此类推,直到dq2达到10,然后队列锁定。在

for x in range(6):
  print('dq1:', sess.run(dq1))
  print('dq2:', sess.run(dq2))

为什么会发生这种事而不是我所期望的?我使用这个来匹配训练示例和标签,但是有些训练示例和标签被跳过/偏移。只是在一个队列中交织文件名是更好的解决方案吗?不管怎样,我想理解这种行为。在

感谢任何帮助。在


Tags: run示例列表string队列顺序tftensorflow
1条回答
网友
1楼 · 发布于 2024-06-01 03:25:56

TensorFlow队列允许您在单个操作中以原子方式对张量列表(更准确地说是固定长度元组)进行排队和出列。张量dq1和{}是同一出列操作的输出,在本例中,这将从队列中删除两个张量的元组。对sess.run(dq1)sess.run(dq2)的每次调用都对应于出列操作的单独调用,但是在调用sess.run(dq1)时,TensorFlow会丢弃另一个元组元素,因为在对sess.run()的调用中没有显式地请求它。在

解决方案是确保dequeue()操作的两个输出都在对sess.run()的调用中消耗。例如,对程序的以下更改应产生您最初预期的结果:

for x in range(6):
  dq1_val, dq2_val = sess.run([dq1, dq2])
  print('dq1:', dq1_val)
  print('dq2:', dq2_val)

相关问题 更多 >