美文网首页
optimizer 的载入和保存

optimizer 的载入和保存

作者: 潘旭 | 来源:发表于2020-06-01 09:30 被阅读0次

    再进行继续训练的时候 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]}]}
    
    

    相关文章

      网友评论

          本文标题:optimizer 的载入和保存

          本文链接:https://www.haomeiwen.com/subject/owhjzhtx.html