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