DeamNet 代码调试
Epoch=2000,运行到999次报错AttributeError: 'str' object has no attribute 'param_group'
Traceback (most recent call last):
File "D:/Papers to read/2022.07/DeamNet-main/DeamNet-main/train.py", line 189, in <module>
if (epoch + 1) % (opt.nEpochs / 2) == 0:
AttributeError: 'str' object has no attribute 'param_group'
Process finished with exit code 1
错误代码段:
if (epoch + 1) % (opt.nEpochs / 2) == 0:
for param_group in optimizer.param_groups:
param_group['lr'] /= 10.0
print('Learning rate decay: lr={}'.param_group['lr'])
optimizer.param_groups: 是长度为2的list,其中的元素是2个字典;optimizer.param_groups[0]: 长度为6的字典,包括[‘amsgrad’, ‘params’, ‘lr’, ‘betas’, ‘weight_decay’, ‘eps’]这6个参数;
optimizer.param_groups[1]: 好像是表示优化器状态的一个字典.
没找到好的解决办法,所以结合看到的print内容,改代码为:
if (epoch + 1) % (opt.nEpochs / 2) == 0:
for param_group in optimizer.param_groups:
param_group['lr'] /= 10.0
# print('Learning rate decay: lr={}'.param_group['lr'])
print('Learning rate decay: lr={}')
由于源代码设置epoch=2000, 运行比较慢,我只是想确定代码没有错误,所以改为epoch=10,简单测试一下。现在不报错了
暂时不确定这行代码不打印后半部分的影响,只是想测试代码,所以算是跑通了,准备开始学习代码主要内容啦。
Learning rate decay: lr={}
===> Epoch[10](1/20): Loss: 0.0002 || Timer: 0.0370 sec.
===> Epoch[10](2/20): Loss: 0.0006 || Timer: 0.0328 sec.
.................
===> Epoch[10](19/20): Loss: 0.0004 || Timer: 0.0358 sec.
===> Epoch[10](20/20): Loss: 0.0003 || Timer: 0.0347 sec.
===> Epoch 10 Complete: Avg. Loss: 0.0004
===> Avg. PSNR: 30.5941 dB
Process finished with exit code 0