2017-12-27 350 views
2

當我開始訓練模型時,以前沒有保存模型。我可以安全地使用model.compile()。我現在已將該模型保存在h5文件中,以便使用checkpoint進行進一步培訓。model.compile()初始化Keras(tensorflow後端)中的所有權重和偏差嗎?

說,我想進一步訓練模型。我很困惑,我可以在這裏使用model.compile()嗎?並且應該在model = load_model()聲明之前還是之後?如果model.compile()重新初始化所有的權重和偏見,我應該在model = load_model()聲明之前。

發現一些討論後,在我看來model.compile()只有當我沒有保存以前的模型時才需要。一旦我保存了模型,就不需要使用model.compile()。這是真的還是假的?當我想預測使用訓練好的模型時,我應該在預測之前使用model.compile()嗎?

回答

2

何時使用?

如果你使用compile,想必一定是load_model()後。畢竟,你需要一個模型來編譯。

compile是做什麼用的?

編譯定義損失函數,所述優化度量。就這樣。

它與權重無關,您可以根據需要多次編譯模型,而不會導致任何問題進行預訓練。

您需要一個編譯模型來火車(因爲訓練使用損失函數和優化器)。但沒有必要編譯一個預測模型。

您是否需要使用多次編譯?

只有:

  • 你想改變其中的一個:
    • 損失函數
    • 優化
    • 指標
  • 您加載(或創建)一個尚未編譯的模型。或者你的加載/保存方法不考慮以前的編譯。

後果再次編譯:

如果再次編譯一個模式,你將失去優化狀態

這意味着你的訓練在開始時會受到一點影響,直到它調整了學習速率,動量等等。但是對權重絕對沒有損害(除非你的初始學習速度如此之大第一個訓練步驟會大幅改變微調的權重)。