2016-10-27 131 views
1

我偶爾會碰到一個問題,在張量流和隨機梯度下降訓練中,我加載了一個微型批次,對我的優化操作造成嚴重破壞,並將其推送到Nans。這當然會在訓練過程中產生錯誤,並迫使我重新開始。即使我在try語句中封裝了優化操作,但在引發異常時,損壞已完成,我需要重新啓動。「倒帶」張量流訓練步驟

有沒有人有一個很好的方式,本質上,倒回優化回到有效的狀態時,它遇到了錯誤?我認爲你可以使用檢查點爲此,但保存/恢復文檔是如此多斑點,我不知道...

回答

1

正如你所建議的檢查點是做到這一點。對於你的情況主要步驟如下:

首先創建一個保護對象你定義後您的圖表:

saver = tf.train.Saver(max_to_keep=5, keep_checkpoint_every_n_hours=1) 

接下來,訓練間歇期間寫出檢查要點:

for step in range(max_steps): 

    ... some training steps here 

    # Save the model every 100 iterations 
    if step % 100 == 0: 
     saver.save(sess, checkpoint_dir, global_step=step) 

最後,當您發現錯誤時,請重新載入上一個良好檢查點:

# this next command restores the latest checkpoint or explicitly specify the filename if you want to use some other logic 
restore_fn = tf.train.latest_checkpoint(FLAGS.restore_dir) 
print('Restoring from %s' % restore_fn) 
saver.restore(sess, restore_fn) 
+0

太棒了 - 這就是我認爲可能的工作 - 這段代碼很有幫助。謝謝。 – Tom

0

答案一個不同的問題:

你在使用哪個優化器?

大的跳躍,就像你可以用簡單的漸變下降得到的,應該不可能用梯度剪裁或者具有有限步長的優化器(如Adam)。

+1

這是一個很好的觀點,adam的表現更好,但我必須使用SGD作爲我正在進行的項目的限制。 – Tom

相關問題