神經網絡同時優化兩個模型的參數/加載兩個模型的參數
框架:Pytorch
以Adam爲例
一、傳參和優化
1、傳入/優化一個模型的參數:
opt= torch.optim.Adam(model_1.parameters)
2、同時傳入/優化兩個模型的參數:
opt = torch.optim.Adam([
{'params': model_1.parameters(), 'lr': 0.001,},
{'params': model_2.parameters()},
])
3、形式2兩個模型具有相同的其他參數(如 lr 等),若要設置不同的參數,可以分別在字典中給出
opt = torch.optim.Adam([
{'params': model_1.parameters(), 'lr': 0.002},
{'params': model_2.parameters(), 'lr': 0.003}
])
# 除lr以外的其他參數都可以採用同樣方式給出
二、保存和加載
1、同一文件中保存多個模型的參數
1.1、保存單個模型
# 保存整個模型
save_name = 'models.pth'
torch.save(model_1, save_name)
# 僅保存參數
save_name = 'models.pt'
torch.save(model_1.state_dict(), save_name)
1.2、保存多個模型
# 整體保存
save_name = 'models.pth'
save_model = {
'model_1': model_1,
'model_2': model_2,
}
torch.save(save_model, save_name)
# 僅保存多個模型中的參數
save_name = 'models.pt'
save_model = {
'model_1': model_1.state_dict(),
'model_2': model_2.state_dict(),
}
torch.save(save_model, save_name)
2、從一個文件中加載多個模型的參數
2.1、加載單個模型(參數)
# 加載整個模型
save_name = 'models.pth'
model_1 = torch.load(save_name)
# 僅加載參數
save_name = 'models.pt'
model_1 = Net_1() # 實例化模型
model_1.load_state_dict(torch.load(save_name))
2.2、加載多個模型(參數)
# 整體加載
save_name = 'models.pth'
load_models = torch.load(save_name)
model_1 = load_models['model_1']
model_2 = load_models['model_2']
# 僅加載多個模型中的參數
save_name = 'models.pt'
load_models = torch.load(save_name)
model_1 = Net_1() # 實例化模型
model_2 = Net_2() # 實例化模型
model_1.load_state_dict(load_models['model_1'])
model_2.load_state_dict(load_models['model_2'])
說明:整個模型和僅參數的區別:
整個模型:是保存整個網絡結構和參數,使用時會加載結構和其中的參數;
僅參數:僅保存網絡模型中的參數,在使用時需要先用訓練時的模型實例化,再往裏面填入參數。
舉個栗子:
加載整個模型就是邊搭框架邊填充參數;僅參數需要先搭好框架(先實例化)再往框架裏填參數