tf.train.range_input_producer(epoch_size,shuffle = True)不会终止也不会导致CPU / GPU负载

时间:2016-11-03 16:16:35

标签: python tensorflow recurrent-neural-network word-embedding

我在使用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_producerepoch_size的变量值)是什么。 事实证明,这个代码不会终止(我甚至不会调用任何session.run(...)也不会使用CPU。我猜这个队列正在等待suggested by Daving Wong

任何线索? THX

pltrdy

2 个答案:

答案 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,队列将阻塞,直到有一个要返回的元素。请仔细检查您的目录和数据。