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

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

框架:Pytorch
以Adam为例

一、传参和优化

1、传入/优化一个模型的参数:
opt= torch.optim.Adam(model_1.parameters)
2、同时传入/优化两个模型的参数:
opt = torch.optim.Adam([
	{'params': model_1.parameters()}, 
	{'params': model_2.parameters()},
	lr=0.001,
	])
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'])
说明:整个模型和仅参数的区别:

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

发布了8 篇原创文章 · 获赞 2 · 访问量 1866

猜你喜欢

转载自blog.csdn.net/leiduifan6944/article/details/103757417