[英]How to use pretrained weights of a model for initializing the weights in next iteration?
我有一個 model 架構。 我已經使用torch.save()
將整個 model 保存了 n 次迭代。 我想通過使用我之前保存的 model 的預訓練權重來運行我的代碼的另一次迭代。
編輯:我希望從預訓練的 model 的權重中完成新迭代的權重初始化
編輯2:只是補充一點,我不打算恢復訓練。 我打算保存 model 並將其用於具有相同參數的單獨訓練。 把它想象成使用一個保存的 model 和權重等來進行更大的運行和更多的樣本(即一個全新的訓練工作)
現在,我做類似的事情:
# default_lr = 5
# default_weight_decay = 0.001
# model_io = the pretrained model
model = torch.load(model_io)
optim = torch.optim.Adam(model.parameters(),lr=default_lr, weight_decay=default_weight_decay)
loss_new = BCELoss()
epochs = default_epoch
.
.
training_loop():
....
outputs = model(input)
....
.
#similarly for test loop
我錯過了什么嗎? 我必須為大量樣本運行很長時間,所以不能等着看結果然后弄清楚事情。
謝謝!
從您發布的代碼中,我看到您只加載了以前的 model 參數,以便從您停止的地方重新開始訓練。 這不足以正確地重新開始訓練。 除了 model 參數(權重)之外,您還需要保存和加載優化器 state,尤其是當您選擇的優化器是 Adam 時,它具有所有權重的速度參數,有助於降低學習率。
為了順利重新開始訓練,我會做以下事情:
# For saving your model
state = {
'model': model.state_dict(),
'optimizer': optimizer.state_dict()
}
model_save_path = "Enter/your/model/path/here/model_name.pth"
torch.save(state, model_save_path)
# ------------------------------------------
# For loading your model
state = torch.load(model_save_path)
model = MyNetwork()
model.load_state_dict(state['model'])
optim = torch.optim.Adam(model.parameters(),lr=default_lr, weight_decay=default_weight_decay)
optim.load_state_dict(state['optimizer'])
除此之外,如果您使用學習率衰減策略,您可能還希望保存學習率、迄今為止您可能需要用於檢查點目的的最佳驗證准確度,以及可能影響訓練的任何其他可變參數。 但在大多數情況下,僅保存和加載 model 權重和優化器 state 就足夠了。
編輯:您可能還想查看以下答案,該答案詳細解釋了如何在不同情況下保存 model。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.