Я пытался изменить пример кода cifer в Chainer, чтобы он работал с несколькими оптимизаторами.
Как написано на странице 946 Документации Chainer (выпуск 7.0.0b3), я подумал, что функция,training.updaters.ParallelUpdater, может принимать не только объект оптимизатора, но также словарь, который отображает строки в оптимизаторы.
Итак, я поместил три объекта оптимизатора в словарь, настроил их для модели и поместил словарь в функцию ParallelUpdate в качестве аргумента.(см. код ниже)
optimizers = {}
optimizers['SGD'] = chainer.optimizers.SGD(args.learnrate)
optimizers['Adam'] = chainer.optimizers.Adam()
optimizers['RMSProp'] = chainer.optimizers.RMSprop()
.
.
for key in optimizers.keys() :
optimizers[key].setup(model)
.
.
updater = training.updaters.ParallelUpdater(
train_iter, optimizer=optimizers, devices = devices
)
Однако программа выдает сообщение об ошибке следующим образом.
File "C:\WPy64-3720\python-3.7.2.amd64\lib\site-packages\chainer\training\updaters\parallel_updater.py", line 82, in __init__
models = {'main': optimizer.target}
AttributeError: 'dict' object has no attribute 'target'
Я понимаю, что объект dict не является объектом оптимизатора, но ядумал, что описание в документе подразумевает, что оптимизаторы автоматически извлекаются из словаря.
Кто-нибудь знает, что не так с моим кодом или как заставить программу обновления работать с несколькими оптимизаторами?