2016-11-21 72 views
0

我想用Tensorflow編寫腳本來訓練網絡。我有一些要求:Tensorflow:如何在不觸發出隊的情況下運行彙總操作

  1. 我需要使用FIFOqueue加載訓練數據集以及驗證數據集;訓練數據集的num_epoches設置爲10,但驗證數據集的num_epoches僅設置爲1,因爲在測試中,我們只需要運行整個驗證數據集一次。
  2. 我需要使用驗證數據集進行多個訓練步驟之後測試網絡,而不是使用由訓練腳本保存的檢查點文件的單獨腳本;
  3. 我需要將loss,accuracy_validation數據存儲到彙總文件中,以在Tensorboard中可視化。

然而,

  1. 我發現,每次我運行代碼sess.run(summary_op)時,它實際上會引發輸入數據,這是不是我所期待的解列操作。
  2. 而且,經過幾個步驟,我需要使用整個驗證數據集來測試網絡,而sess.run(test_acc)將僅使用一批驗證數據集來測試網絡。

那麼如何解決這兩個問題?

回答

0

您可以從SESS運行得到的數據點,並直接將它們添加到彙總不運行summary_op,例如:

step, _, loss_value, cur_learning_rate = sess.run([global_step, train_op, avg_loss, lr]) 
... 
summary = tf.Summary() 
summary.value.add(tag='train/loss_values', simple_value=loss_value) 
summary.value.add(tag='train/learning_rates', simple_value=cur_learning_rate) 
summary_writer.add_summary(summary, step) 

這樣的隊列將不會被你的summary_op消耗。

0

另一個解決方案是在訓練操作的同時運行摘要操作。

_, loss_value, summary = sess.run([train_op, avg_loss, summary_op]) 

這樣你只能出隊一次。

相關問題