再进行继续训练的时候 optimizer 载入和保存非常重要。但是有个疑问?就是optimizer是如何保存参数名字的呢?
{'state': {},
'param_groups': [{'lr': 0.1, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False,
'params': [4401239528, 4401240680]}]}
params
保存了两个参数的 "id", 那么,这里的疑问就是,在次恢复的时候使用 load_state_dict
参数 "id" 是要变化的?那么岂不是会有问题?
经过试验,在使用 load_state_dict
的时候, params
中的参数 "id" 会被改变成新的 "id",也就是说确实会变化。但是,调用 torch.load
得到的 state_dict
确实是没有变化的。这就合理了,每次重新训练的参数是用新绑定的参数id
.
import torch
model = torch.nn.Linear(in_features=3, out_features=3)
optimizer = torch.optim.Adam(params=model.parameters(), lr=1e-1)
optimizer_file = "optimizer.pt"
print(optimizer.state_dict())
loaded_stated = torch.load(optimizer_file)
print("loaded", loaded_stated)
optimizer.load_state_dict(loaded_stated)
print(optimizer.state_dict())
输出:
{'state': {},
'param_groups': [
{'lr': 0.1, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False,
'params': [4506560048, 4506561200]}]}
loaded {'state': {},
'param_groups': [{'lr': 0.1, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False,
'params': [4401239528, 4401240680]}]}
{'state': {},
'param_groups': [{'lr': 0.1, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False,
'params': [4506560048, 4506561200]}]}
网友评论