Dictionary 更新程序不能与优化器字典一起使用

Dictionary 更新程序不能与优化器字典一起使用,dictionary,optimization,chainer,Dictionary,Optimization,Chainer,我一直在尝试修改Chainer的cifer示例代码,以便它可以与多个优化器一起工作 正如Chainer文档(7.0.0b3版)第946页所述,我认为函数training.updaters.ParallelUpdater不仅可以获取优化器对象,还可以获取将字符串映射到优化器的字典 因此,我将三个优化器对象放在一个字典中,用一个模型对它们进行设置,并将字典作为参数放入ParallelUpdate函数中。(见下面的代码) 但是,程序会给出如下错误消息 File "C:\WPy64-3720\pytho

我一直在尝试修改Chainer的cifer示例代码,以便它可以与多个优化器一起工作

正如Chainer文档(7.0.0b3版)第946页所述,我认为函数training.updaters.ParallelUpdater不仅可以获取优化器对象,还可以获取将字符串映射到优化器的字典

因此,我将三个优化器对象放在一个字典中,用一个模型对它们进行设置,并将字典作为参数放入ParallelUpdate函数中。(见下面的代码)

但是,程序会给出如下错误消息

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”对象不是优化器对象,但我认为文档中的描述意味着优化器会自动从字典中删除


有人知道我的代码有什么问题,或者如何让更新程序与多个优化器一起工作吗?

要使用多个优化器,您需要覆盖
update\u core
方法,并提供自定义逻辑以使用这些优化器进行更新。接受一组优化器的功能旨在使用单独的优化器(如GAN)优化多个不同的目标,而不是对单个目标的参数应用不同的更新规则


请注意,这意味着您最终需要自己实现并行更新,因为需要覆盖的
ParallelUpdater.update\u core
实际上实现了并行化。我强烈推荐ChainerMN,它将优化逻辑和并行训练彻底解耦。

谢谢您的回答。现在我知道我应该尝试另一种方式来实现我想要的。非常感谢。
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'