神經網絡同時優化兩個模型的參數/加載兩個模型的參數

神經網絡同時優化兩個模型的參數/加載兩個模型的參數

框架: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'])
說明:整個模型和僅參數的區別:

整個模型:是保存整個網絡結構和參數,使用時會加載結構和其中的參數;
僅參數:僅保存網絡模型中的參數,在使用時需要先用訓練時的模型實例化,再往裏面填入參數。
舉個栗子:
加載整個模型就是邊搭框架邊填充參數;僅參數需要先搭好框架(先實例化)再往框架裏填參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章