[英]Why my training speed in Keras with multi_gpu_model is worse than single gpu?
[英]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
FAQ , model_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.