本文主要是介绍【超分辨率MSRN代码问题/PyTorch-二】中断训练后从停止的epoch继续训练,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当我不小心中断训练后,想继续训练时,发现MSRN代码有挺多问题啊。。
1. 首先想继续训练的话,运行主文件时的参数要从原来给的
python main.py --template MSRN --save MSRN_X2 --scale 2 --reset --save_results --patch_size 96 --ext sep_reset
修改成
python main.py --template MSRN --load MSRN_X2 --resume -1 --scale 2 --save_results --patch_size 96 --ext sep
也就是删除参数save及reset,添加参数load及resume的默认值
重要参数的作用:(主要位于在utility.py中的checkpoint函数)
--save:设置本次训练保存实验结果的文件夹。没有修改load参数默认值时起作用。
--load:设置本次训练要加载的已有实验结果的文件夹。
--reset:删除save和load参数中的文件夹,若其中有之前的训练结果也会删掉,并重建空文件夹。
--resume:为-1时,可上面设置的文件夹中的model_latest.pt开始训练;
为0(默认值)时,若pre_train值为点则从头开始训练,若有其它值,则从模型pre_train开始训练;
为其他值时,从model_{resume}.pt开始恢复训练
2. 修改完上述参数后可以训练,但发现比如从epoch514开始训练,学习速率lr本应该是2.5e-5,但却显示6.25e-6。
应该将trainer.py中的28行左右
for _ in range(len(ckp.log)): self.scheduler.step()
修改为
self.scheduler.last_epoch = len(ckp.log)
原因:在设置load参数后,会从optimizer.pt中加载上次训练中断时epoch(比如514)的lr,此时lr已经是2.5e-5了,然而接下来源代码的for循环要循环514下,会在2.5e-5的基础上再降低两次gamma倍的lr(每200epoch乘以gamma)。
这篇关于【超分辨率MSRN代码问题/PyTorch-二】中断训练后从停止的epoch继续训练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!