首页 > 其他分享 >神经网络同时优化两个模型的参数/加载两个模型的参数

神经网络同时优化两个模型的参数/加载两个模型的参数

时间:2023-01-10 16:55:44浏览次数:39  
标签:name models 模型 神经网络 参数 model save

框架: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'])

注:整个模型和仅参数的区别:
整个模型:是保存整个网络结构和参数,使用时会加载结构和其中的参数;
仅参数:仅保存网络模型中的参数,在使用时需要先用训练时的模型实例化,再往里面填入参数。
举个栗子:
加载整个模型就是边搭框架边填充参数;仅参数需要先搭好框架(先实例化)再往框架里填参数

标签:name,models,模型,神经网络,参数,model,save
From: https://www.cnblogs.com/jingweip/p/17040750.html

相关文章