何时在 PyTorch 中使用单独的优化器?

问题描述 投票:0回答:1

here给出的示例分别针对

encoder
decoder
使用了两个优化器。为什么?什么时候这样做?

pytorch
1个回答
5
投票

如果你有多个网络(从

nn.Module
继承的多个对象的意义上),你必须这样做有一个简单的原因:当构造
torch.nn.optim.Optimizer
对象时,它将需要优化的参数作为参数。对于你的情况:

encoder_optimizer = optim.Adam(encoder.parameters(), lr=learning_rate)
decoder_optimizer = optim.Adam(decoder.parameters(), lr=learning_rate) 

这也让您可以自由地独立改变参数作为学习率。如果您不需要,您可以创建一个继承自

nn.Module
并包含网络、编码器和解码器的新类,或者创建一组参数以提供给优化器,如此处所解释:

nets = [encoder, decoder]
parameters = set()
for net in nets:
    parameters |= set(net.parameters())

其中

|
是此上下文中集合的并集运算符。

© www.soinside.com 2019 - 2024. All rights reserved.