何时在PyTorch中使用个别优化器?

时间:2017-09-23 08:25:48

标签: torch pytorch

给定的示例here分别为encoderdecoder使用了两个优化器。为什么?什么时候这样做?

1 个答案:

答案 0 :(得分:2)

如果您有多个网络(从多个对象的意义上继承自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并包含网络,编码器和解码器的新类,或者创建一组参数,以便按照here解释给优化器:

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

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