我偶爾會碰到一個問題,在張量流和隨機梯度下降訓練中,我加載了一個微型批次,對我的優化操作造成嚴重破壞,並將其推送到Nans。這當然會在訓練過程中產生錯誤,並迫使我重新開始。即使我在try語句中封裝了優化操作,但在引發異常時,損壞已完成,我需要重新啓動。「倒帶」張量流訓練步驟
有沒有人有一個很好的方式,本質上,倒回優化回到有效的狀態時,它遇到了錯誤?我認爲你可以使用檢查點爲此,但保存/恢復文檔是如此多斑點,我不知道...
我偶爾會碰到一個問題,在張量流和隨機梯度下降訓練中,我加載了一個微型批次,對我的優化操作造成嚴重破壞,並將其推送到Nans。這當然會在訓練過程中產生錯誤,並迫使我重新開始。即使我在try語句中封裝了優化操作,但在引發異常時,損壞已完成,我需要重新啓動。「倒帶」張量流訓練步驟
有沒有人有一個很好的方式,本質上,倒回優化回到有效的狀態時,它遇到了錯誤?我認爲你可以使用檢查點爲此,但保存/恢復文檔是如此多斑點,我不知道...
正如你所建議的檢查點是做到這一點。對於你的情況主要步驟如下:
首先創建一個保護對象你定義後您的圖表:
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)
答案一個不同的問題:
你在使用哪個優化器?
大的跳躍,就像你可以用簡單的漸變下降得到的,應該不可能用梯度剪裁或者具有有限步長的優化器(如Adam)。
這是一個很好的觀點,adam的表現更好,但我必須使用SGD作爲我正在進行的項目的限制。 – Tom
太棒了 - 這就是我認爲可能的工作 - 這段代碼很有幫助。謝謝。 – Tom