2017-09-04 27 views
0

版本:2.0.2 chainer我 使用亞當優化,然後報告錯誤,我發現它是由代碼(fix1 == 0?)造成的: 在adam.py:亞當優化器在chainer中報告錯誤?

@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 
+0

你在'exponential_shift'中試圖改變什麼值? 你知不知道亞當使用'alpha'作爲學習速度,而'lr'本身不應該被觸及。 – corochann

+0

如何使用adam算法?我無法設置lr? – machen

+0

@corcochann是否有任何示例代碼如何使用亞當,是的,我在每個時代設置lr decay exponential_shift = 0.9 – machen

回答

0

使用「alpha」屬性來控制Chainer中的Adam的學習率。 「lr」被定義爲內置屬性,它不應該被其他值覆蓋。

如果您使用Adam優化程序,請將「alpha」設置爲ExponentialShiftofficial doc)的屬性以及衰減學習率。

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')) 
0

我有同樣的問題,並嘗試corochann的方法。 然而,它並沒有解決這個問題。


我chainer版本2.1.0 使用的代碼是https://github.com/chainer/chainer/blob/master/examples/cifar/train_cifar.py 被改變成L57 「優化= chainer.optimizers.Adam()」。

+0

這並沒有真正回答這個問題。如果您有不同的問題,可以通過單擊[提問](https://stackoverflow.com/questions/ask)來提問。您可以[添加賞金](https://stackoverflow.com/help/privileges/set-bounties)在您擁有足夠的[聲譽](https://stackoverflow.com/help/)後吸引更多關注此問題什麼聲譽)。 - [來自評論](/ review/low-quality-posts/17533049) – Antti29

+0

我認爲這是你如何導入模塊的問題。 但是,謝謝你指出,我更新了我的答案。 – corochann