为什么有些人将两个不同网络的参数链接起来并使用相同的优化器进行训练?

Asj*_*aza 5 python deep-learning pytorch generative-adversarial-network

我正在查看 CycleGAN 的官方 pytorch 实现,作者在那里链接了两个网络的参数,并为两个网络使用了一个优化器。这是如何运作的?是否比对两个不同的网络使用两个不同的优化器更好?

all_params = chain(module_a.parameters(), module_b.parameters())
optimizer = torch.optim.Adam(all_params)
Run Code Online (Sandbox Code Playgroud)

Zab*_*azi 5

来自chain文档:https ://docs.python.org/3/library/itertools.html#itertools.chain

itertools.chain(*iterables)

    Make an iterator that returns elements from the first iterable until it is exhausted, then proceeds to the next iterable, until all of the iterables are exhausted.
Run Code Online (Sandbox Code Playgroud)

parameters()给你一个迭代时,你可以使用优化器同时优化两个网络的参数。因此,两个模型将使用相同的优化器状态(Modules),如果使用两个不同的优化器,参数将分别优化。

如果您有一个复合网络,则有必要同时优化(所有)参数,因此对所有参数使用单个优化器是可行的方法。