2016-08-15 84 views
1

我一直有一個問題,如果我在訓練期間運行sess.run(tf.merge_all_summaries()),程序將掛起。這也引起了a github issue,雖然我不確定我的問題是否一樣。tensorflow.merge_all_summaries()掛起

供參考,這是我使用的火車代碼:

logits = fcn8.upscore # last layer of the network 
loss = softmax_loss(logits, lb, pipe.NUM_CLASSES) 

train_op = build_graph(loss, global_step) 
saver = tf.train.Saver(tf.all_variables()) 
summary_op = tf.merge_all_summaries() 

sess.run(tf.initialize_all_variables()) 
tf.train.start_queue_runners(sess=sess) 
summary_writer = tf.train.SummaryWriter(FLAGS.train_dir, sess.graph) 

for step in range(FLAGS.max_epochs * pipe.EPOCH_LENGTH): 
    if sess.run(queue.size()) == 0: 
    sess.run(enqueue_files) 

    _, loss_val = sess.run([train_op, loss]) 

    if step % 10 == 0: 
    print('loss at step {}: {}'.format(step, loss_val)) 
    summary = sess.run(summary_op) # hangs here 
    summary_writer.add_summary(summary, step) 

這是常見的事?或者在編寫訓練代碼時是否有一些錯誤?預先感謝您的幫助。

編輯:這似乎是唯一發生這種情況的時候,當我嘗試合併彙總時,隊列爲空。我想知道這是否是巧合。

回答

1

您的summary_op可能會觸發一個隊列出列隊列,當隊列爲空時它將掛起。

一個解決辦法是使用變量調整你的代碼,以便彙總不會觸發隊列出隊,喜歡這裏 - TensorFlow: Reading images in queue without shuffling

一個更簡單的解決辦法是有一個最後期限,這樣初始化你的會話您的空出隊失敗DeadlineExceeded一段時間後,而不是掛起

tf.reset_default_graph() 
queue = tf.FIFOQueue(capacity=5, dtypes=[tf.int32]) 
config = tf.ConfigProto() 
config.operation_timeout_in_ms=2000 
sess = tf.InteractiveSession("", config=config) 
try: 
    sess.run(queue.dequeue()) 
except tf.errors.DeadlineExceededError: 
    print "DeadlineExceededError detected"