0

版本:chainer 2.0.2 我使用 Adam 优化器,然后报错,我发现是这个代码引起的(fix1==0?):在adam.py:

@property
    def lr(self):
        fix1 = 1. - math.pow(self.hyperparam.beta1, self.t)
        fix2 = 1. - math.pow(self.hyperparam.beta2, self.t)
        return self.hyperparam.alpha * math.sqrt(fix2) / fix1

错误日志:

Traceback (most recent call last):
  File "AU_rcnn/train.py", line 237, in <module>
    main()
  File "AU_rcnn/train.py", line 233, in main
    trainer.run()
  File "/root/anaconda3/lib/python3.6/site-packages/chainer/training/trainer.py", line 285, in run
    initializer(self)
  File "/root/anaconda3/lib/python3.6/site-packages/chainer/training/extensions/exponential_shift.py", line 48, in initialize
    self._init = getattr(optimizer, self._attr)
  File "/root/anaconda3/lib/python3.6/site-packages/chainer/optimizers/adam.py", line 121, in lr
    return self.hyperparam.alpha * math.sqrt(fix2) / fix1
ZeroDivisionError: float division by zero
4

2 回答 2

1

使用“alpha”属性来控制AdamChainer 中的学习率。“lr”被定义为内置属性,不应被其他值覆盖。

如果您使用优化器,请将“alpha”设置为ExponentialShift官方文档)的属性以及衰减学习率。Adam

from chainer.optimizers import Adam
optimizer = Adam(alpha=0.001)

# --- Define trainer here... ---

trainer.extend(extensions.ExponentialShift("alpha", 0.99, optimizer=optimizer), trigger=(1, 'epoch'))
于 2017-09-05T00:42:12.933 回答
0

我有同样的问题,并尝试了 corochann 的方法。然而,它并没有解决这个问题。


我的 chainer 版本 2.1.0 使用的代码是https://github.com/chainer/chainer/blob/master/examples/cifar/train_cifar.py 将 L57 更改为“optimizer = chainer.optimizers.Adam()”。

于 2017-10-05T05:11:36.693 回答