TypeError: type object argument after * must be a sequence, not FunctionSet
chainerでサンプルコードを動かすと、optimizer.setup
でこけた。
>>> import numpy as np >>> from chainer import cuda, Function, FunctionSet, gradient_check, Variable, optimizers, utils >>> import chainer.functions as F >>> model = FunctionSet( ... l1 = F.Linear(4, 3), ... l2 = F.Linear(3, 2), ... ) >>> optimizer = optimizers.SGD() >>> optimizer.setup(model) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.4/site-packages/chainer/optimizer.py", line 51, in setup for p, g in zip(*params_grads): TypeError: type object argument after * must be a sequence, not FunctionSet
model内のl1やl2の勾配を設定していないことが原因だ。実はchainerはバージョン1.3.1辺りから、setupするだけで勾配の初期値を設定してくれるようになった。旧バージョンだと別の関数を叩く必要があるが、最新版はsetupだけで良いのだ。つまりこのエラーをなんとかするには、chainerのバージョンを上げればいい。
sudo pip3 install --upgrade chainer