【超分辨率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,添加参数loadresume的默认值

重要参数的作用:(主要位于在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)。

你可能感兴趣的:(问题,图像处理,超分辨率代码)