神经网络修改后,如何加载之前预训练模型的优化器参数?
2024-08-26 05:32:38
更新:一开始没有意识到修改神经网络是在结构上进行的。比如 fine-tuning 的时候通常重新调整 output dimension,所以最后的 fc layer 也会变。这样原来的 fc layer 的 values 就要都扔掉了。
optimizer 的 load_state_dict 和 model 的很相似,都是把 checkpoint 中的数据按顺序 load 进来,所以声明了 model_new 并声明了对应的 optimizer_new 之后,要手动修改 checkpoint 里的数据,把这里面你能 load 的数据放在合适的位置,然后在 optimizer_new 里新增的不能 load 的位置就留个空位。然后用 load_state_dict 就可以了。
需要保存的时候就保存下来
state={'state_dict': model.state_dict(),
'optimizer' : optimizer.state_dict(),
'other_things' : other_things
}
torch.save(state, save_file_path)
然后就可以 load 进来了
checkpoint = torch.load(save_file_path)
optimizer.load_state_dict(checkpoint['optimizer'])