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

sta*_*low 1 torch pytorch

这里给出的例子encoder分别使用了两个优化器decoder。为什么?什么时候这样做?

McL*_*nce 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) 
Run Code Online (Sandbox Code Playgroud)

这也使您可以自由地独立改变参数作为学习率。如果您不需要,您可以创建一个继承nn.Module并包含网络、编码器和解码器的新类,或者创建一组参数以提供给优化器,如下所述

nets = [encoder, decoder]
parameters = set()
for net in nets:
    parameters |= set(net.parameters())
Run Code Online (Sandbox Code Playgroud)

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