解决问题lr_scheduler.step()要在optimizer.step()后面
源码:DIC
解决方法
1.如果cuda兼容就安装pytorch1.1.0
2.在SRLandmarkSolver.py里的:
def load(self):
。
。#最后面注释掉下面两行
#if self.is_train:
# self.update_learning_rate()
def train_step(self):
self.model.train()#在训练模型时会在前面加上:model.train(),是保证BN层用每一批数据的均值和方差,即针对每个mini-batch的 ;
self.optimizer.zero_grad()#先将梯度归零
loss_pix = 0.0
SR_list= self.model(self.LR)
self.SR = SR_list
self.SR = SR_list[-1]
for step, SR in enumerate(SR_list):
loss_pix += self.loss_dict['pixel']['weight'] * self.loss_dict[
'pixel']['criterion'](SR, self.HR)
loss = loss_pix
loss.backward()#反向传播计算得到每个参数的梯度值
self.optimizer.step()#通过梯度下降执行一步参数更新
self.update_learning_rate()#**在这里加上**
self.model.eval()#在测试模型时会在前面使用:model.eval(),是保证BN用全部训练数据的均值和方差,即针对单张图片的;
return {
'loss_pix': loss_pix.item(),
#'loss_align': loss_align.item(),
'loss_total': loss.item()
}
解决!
问题二:UserWarning: The epoch parameter in scheduler.step()
was not necessary and is being deprecated where possible. Please use scheduler.step()
to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose. warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)
不知道