如何使用模型的预训练权重来初始化下一次迭代中的权重?

How to use pretrained weights of a model for initializing the weights in next iteration?

我有一个模型架构。我已经使用 torch.save() 保存了整个模型进行了 n 次迭代。我想 运行 使用我之前保存的模型的预训练权重对我的代码进行另一次迭代。

编辑:我希望从预训练模型的权重中完成新迭代的权重初始化

编辑2:补充一下,我不打算恢复训练。我打算保存模型并将其用于具有相同参数的单独训练。可以把它想象成使用一个带有权重等的保存模型来获得更大的 运行 和更多的样本(即一个完整的新训练工作)

现在,我会做类似的事情:

# default_lr = 5
# default_weight_decay = 0.001
# model_io = the pretrained model 
model = torch.load(model_io) 
optim = torch.optim.Adam(model.parameters(),lr=default_lr, weight_decay=default_weight_decay)  
loss_new = BCELoss()  
epochs = default_epoch 
.
.
training_loop():
....
outputs = model(input)
....
.
#similarly for test loop

我错过了什么吗?我必须 运行 很长一段时间才能获得大量样本,所以不能等着看结果然后弄清楚事情。

谢谢!

从您发布的代码中,我看到您只是加载了以前的模型参数,以便从您停止的地方重新开始训练。这不足以正确重新开始训练。除了模型参数(权重)之外,您还需要保存和加载优化器状态,​​尤其是当您选择的优化器是 Adam 时,它的所有权重都有速度参数,有助于降低学习率。

为了顺利重启训练,我会做以下事情:

# For saving your model

state = {
    'model': model.state_dict(),
    'optimizer': optimizer.state_dict()
}
model_save_path = "Enter/your/model/path/here/model_name.pth"
torch.save(state, model_save_path)

# ------------------------------------------

# For loading your model
state = torch.load(model_save_path)

model = MyNetwork()
model.load_state_dict(state['model'])

optim = torch.optim.Adam(model.parameters(),lr=default_lr, weight_decay=default_weight_decay)
optim.load_state_dict(state['optimizer'])

除此之外,如果您正在使用学习率衰减策略,您可能还想保存您的学习率、迄今为止您可能想要用于检查点目的的最佳验证准确性,以及可能影响您的任何其他可变参数训练。但在大多数情况下,仅保存和加载模型权重和优化器状态就足够了。

编辑:您可能还想查看以下内容 ,其中详细说明了在不同情况下应如何保存模型。