何时在PyTorch中使用单独的优化器?
如果您有多个网络(从多个对象继承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())
其中|
是在这种情况下集合的联合运算符。
感谢您的回答。那么这是否意味着如果我们只有从'nn.Module'继承的编码器和解码器类,简单地将编码器的隐藏流传送到解码器(例如'enc_out,enc_hidden = encoder(x); dec_out =解码器(y,enc_hidden)')并且只使用一个'optimizer'在这种情况下不起作用? – Edityouprofile
@displayname我不太明白你想要做什么。你能否详细说明你的问题 – McLawrence
抱歉,迟到的回复,我认为你提到的两种方法是标准的方法来做到这一点。 – Edityouprofile
如果我的回答对您有帮助,您会考虑标记为已接受,以便问题不再无法解答吗? – McLawrence