Python tf.train.range\u input\u producer(历元大小,shuffle=True)不会终止,也不会导致CPU/GPU负载

Python tf.train.range\u input\u producer(历元大小,shuffle=True)不会终止,也不会导致CPU/GPU负载,python,tensorflow,recurrent-neural-network,word-embedding,Python,Tensorflow,Recurrent Neural Network,Word Embedding,我在处理RNN时遇到了一个奇怪的问题。我正在遵循并尝试我自己的(更简单的)实现,这是我的灵感来源 调试后,我发现问题来自(第115行)中的ranger\u input\u producer 我用最小的例子将其隔离: import tensorflow as tf epoch_size = 20 i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue() 这就是ptb_producer(具有epoch_size的

我在处理RNN时遇到了一个奇怪的问题。我正在遵循并尝试我自己的(更简单的)实现,这是我的灵感来源

调试后,我发现问题来自(第115行)中的
ranger\u input\u producer

我用最小的例子将其隔离:

import tensorflow as tf

epoch_size = 20
i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue()
这就是
ptb_producer
(具有
epoch_size
的可变值)。 实际上,这段代码并没有终止(我甚至没有调用任何
会话。运行(…)
,也没有使用CPU。我猜队列正在等待什么

有什么线索吗? Thx


pltrdy

由于队列为空,您可能遇到了一个出列I/O块。(ptb_producer使用tf.train.range_input_producer,它使用FIFOQueue。)根据队列,将阻塞直到有元素返回。请仔细检查您的目录和数据。

如果您只是使用
将tf.Session()作为sess:
, 必须使用显式打开线程
threads=tf.train.start\u queue\u runners()
。 但在ptb_word_lm.py中,它使用如下代码 sv=tf.train.Supervisor(),sv.managed_session()作为sess:,
Supervisor()函数包含一些隐式启动线程的内容

你说得对,问题一定来自I/O,因为即使是
sess.run(data)
也不会终止。顺便说一句,目录/文件正常(否则会引发异常。在处理数据的方式上看不到真正的差异。出于各种原因,我确实使用了迭代器而不是队列(如tensorflow 0.11 ptb_word_lm实现)。不过,我确实认为您是对的,因为我阅读了与“手动”启动队列等相关的内容。因此,我正在验证anwser.Thx:)