Pytorch:使用保存不正确的自定义VGG模型恢复网络



我目前正在为模型自定义转发方法。我正在使用一些运行VGG的教程代码。我用基线模型做了几次运行,它似乎工作正常。之后,我使用以下方法替换了 VGG 的前向方法:

net.forward = types.MethodType(forward_vgg_new, net)

遗憾的是,教程代码保存模型的方式是:

state = {
'net':net,
'acc':acc,
'epoch':epoch,
}
...
torch.save(state, ...)

虽然这适用于原始教程代码,但加载不再适用于我的自定义模型,因为我得到:

属性

错误:"VGG"对象没有属性"forward_vgg_new">

从那以后,我从文档中读到,保存模型的state_dict对我来说更好:

state = {
'net':net.state_dict(),
'acc':acc,
'epoch':epoch,
}
...
torch.save(state, ...)

虽然我将为将来的运行更改代码,但我想知道是否有可能挽救我已经训练过的模型。我天真地已经尝试导入 VGG 类并将我的 forward_vgg_new 方法添加到其中:

setattr(VGG, 'forward_vgg_new', forward_vgg_new)

在调用Torch.load之前,但它不起作用。

为了解决这个问题,我直接进入 VGG 库并临时添加了我的函数,以便我可以加载保存的模型并仅保存它们的状态字典。恢复保存后,我恢复了对 VGG 库的更改。这不是解决问题的最优雅的方法,但它奏效了。

最新更新