首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么有些人将两个不同网络的参数链接在一起,并用相同的优化器训练它们?

为什么有些人将两个不同网络的参数链接在一起,并用相同的优化器训练它们?
EN

Stack Overflow用户
提问于 2020-05-17 11:10:56
回答 2查看 651关注 0票数 5

我在看CycleGAN的官方pytorch实现,在那里,作者链接了两个网络的参数,并为两个网络使用了一个单独的优化器。这是怎么回事?这比为两个不同的网络使用两个不同的优化器更好吗?

代码语言:javascript
运行
复制
all_params = chain(module_a.parameters(), module_b.parameters())
optimizer = torch.optim.Adam(all_params)
EN

回答 2

Stack Overflow用户

发布于 2020-05-17 11:18:50

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

代码语言:javascript
运行
复制
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.

由于parameters()提供了一个迭代器,因此您可以使用优化器同时优化这两个网络的参数。因此,两个模型(Modules)将使用相同的优化器状态,如果您使用两个不同的优化器,则参数将分别优化。

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

票数 3
EN

Stack Overflow用户

发布于 2021-05-14 00:17:00

由于“循环”的原因,同时优化两个发电机(并增加两个损失)是有意义的。循环损耗使用两个生成器- G_B(G_A(A))G_A(G_B(B))。我认为,如果您要使用单独的优化器,则需要在调用step()之前对这两个损失调用backward()才能达到相同的效果(对于所有优化算法,这不一定都是真的)。

在官方代码中,鉴别器的参数也是链接的,但您可以很容易地使用单独的优化器(同样,对于其他优化算法,这不一定是真的),因为D_A的损失不依赖于D_B。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61846505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档