我在使用RNN时遇到了一个奇怪的问题。我正在关注TensorFlow RNN Tutorial并尝试我自己的(更简单的)实现,这个实现受到R2RT's Blog Post: Recurrent Neural Networks in Tensorflow I 的启发。
调试后我确认问题来自tensorflow.models.rnn.ptb.reader.py中的ranger_input_producer
(第115行)。
我在最小的例子中隔离了它:
import tensorflow as tf
epoch_size = 20
i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue()
ptb_producer
(epoch_size
的变量值)是什么。
事实证明,这个代码不会终止(我甚至不会调用任何session.run(...)
也不会使用CPU。我猜这个队列正在等待suggested by Daving Wong。
任何线索? THX
pltrdy
答案 0 :(得分:6)
如果您只是使用代码
with tf.Session() as sess:
,
你必须明确地打开线程
threads = tf.train.start_queue_runners()
。
但在ptb_word_lm.py中,它使用这样的代码
sv = tf.train.Supervisor() with sv.managed_session() as sess:
,
Supervisor()函数包含一些隐式启动线程的东西
答案 1 :(得分:0)
由于队列为空,您可能会遇到出队I / O块。 (ptb_producer使用tf.train.range_input_producer,它使用FIFOQueue。)根据documentation,队列将阻塞,直到有一个要返回的元素。请仔细检查您的目录和数据。