解决TypeError: type complex doesn‘t define __round__ method

在调整学习率的时候遇到的一个bug,现已解决。
解决TypeError: type complex doesn‘t define __round__ method_第1张图片
首先看这个bug说的是:类型complex(复数:i+j)类型不能使用round函数。
为啥不能使用呢:
在这里插入图片描述
round函数是四舍五入,round(lr,10)就是取lr四舍五入后十位。而复数不能进行四舍五入。
那么lr是一个复数,为什么lr是一个复数?
我们知道复数是对负数开偶数次方,也就是lr是一个负数,这显然是不合理的,那么lr是通过lr_scheduler在不断的迭代减小的,说明lr已经减少到负数了,那肯定是lr_scheduler的原因了。
我们找到lr_scheduler:

lr_scheduler = PolyLR(optimizer,
                      max_epoch=500,
                      power=0.9)

我使用的poly学习率:图片参考
解决TypeError: type complex doesn‘t define __round__ method_第2张图片
解决TypeError: type complex doesn‘t define __round__ method_第3张图片
lr为负,说明epoch/num_epoch已经大于1了,当前的epoch大于总的epoch也是不现实的。
然后我就在打印学习率地方设置了print。打印一下学习率。
解决TypeError: type complex doesn‘t define __round__ method_第4张图片
然后我就发现了在epoch1的第705个iteration处,lr为负值,702处为0,说明epoch已经为500,但是现在才是第1代呀!
相当在epoch=0时,795/3=265
在epoch=1时,702/3=234
234+265=500!!!
也就是错误的把polylr的epoch参数当做真实的的epoch参数了,polylr的epoch参数应该为iteration的数目,即总数为(795/3)*500=132500。因此把参数重新修改:
在这里插入图片描述
成功运行!!!
解决TypeError: type complex doesn‘t define __round__ method_第5张图片

你可能感兴趣的:(pytorch踩坑,python,开发语言,深度学习,人工智能)