簡體   English   中英

如何使用 model 的預訓練權重在下一次迭代中初始化權重?

[英]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.

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