在torch7中从检查点恢复CNN的训练

我正在训练一个CNN。在总共的epochs结束时,我得到了约0.001的l2损失并保存了一个检查点。现在,当我想要恢复训练时,我加载了检查点,并且我的起始误差大于0.008。

以下是我如何保存检查点的方法:

paths.mkdir('checkpointsR3')
parametersR, gradParametersR = nil, nil -- nil them to avoid spiking memory
if epoch % 50 == 0 then
     util.save('checkpointsR3/' .. opt.name .. '_' .. (epoch+1000) .. '_net_R.t7', netR, opt.gpu)
end

以下是我如何加载检查点的方法:

-- load Residual Learner
assert(opt.net ~= '', 'provide a generator model')
netR = util.load(opt.net, opt.gpu)
netR:evaluate()

util是从soumith chintala's dcgan.torch直接使用的lua文件。

我想知道我做错了什么,为什么l2损失比我在检查点处训练时还要高。我检查了我加载的最新检查点,但我仍然得到一个更高的误差。

点赞
用户7877814
用户7877814

明白了。

问题出在于:

netR:evaluate()

根据 torch 的文档 文档链接,如果想要继续训练,应该使用 training() 而不是 evaluate(),因为它为训练和测试不同地初始化了 BatchNormalization 层。

2017-04-17 19:21:22