簡體   English   中英

在Keras中使用multi_gpu_model恢復培訓

[英]Resume training with multi_gpu_model in Keras

我正在使用multi_gpu_model中的multi_gpu_model訓練修改過的InceptionV3模型,並使用model.save來保存整個模型。

然后我關閉並重新啟動IDE並使用load_model重新實例化模型。

問題是我無法在我離開的地方恢復訓練。

這是代碼:

parallel_model = multi_gpu_model(model, gpus=2)

parallel_model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

history = parallel_model.fit_generator(generate_batches(path), steps_per_epoch = num_images/batch_size, epochs = num_epochs)

model.save('my_model.h5')

在IDE關閉之前,損失大約為0.8。

重新啟動IDE后,重新加載模型並重新運行上面的代碼,損失變為1.5。

但是,根據model_save FAQmodel_save應該保存整個模型(架構+權重+優化器狀態),而load_model應該返回一個與前一個模型相同的編譯模型。

所以我不明白為什么在恢復訓練后損失會變大。

編輯:如果我不使用multi_gpu_model並只使用普通模型,我就可以恢復我離開的地方。

當您調用multi_gpu_model(...)multi_gpu_model(...)自動將模型的權重設置為某些默認值(至少在我當前使用的2.2.0版本中)。 這就是為什么你無法在保存時恢復訓練的原因。

我剛剛用順序模型中的權重替換並行模型的權重來解決問題:

parallel_model = multi_gpu_model(model, gpus=2)

parallel_model.layers[-2].set_weights(model.get_weights()) # you can check the index of the sequential model with parallel_model.summary()

parallel_model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

history = parallel_model.fit_generator(generate_batches(path), steps_per_epoch = num_images/batch_size, epochs = num_epochs)

我希望這能幫到您。

@ saul19am編譯時,只能加載權重和模型結構,但仍然會丟失optimizer_state。 我認為可以提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM