何时在 PyTorch 中使用单独的优化器?
When to use individual optimizers in PyTorch?
给出的示例 here 分别为 encoder
和 decoder
使用了两个优化器。为什么?什么时候这样做?
如果你有多个网络(在从 nn.Module
继承的多个对象的意义上),你必须这样做,原因很简单:当构造一个 torch.nn.optim.Optimizer
对象时,它需要应该作为参数优化的参数。你的情况:
encoder_optimizer = optim.Adam(encoder.parameters(), lr=learning_rate)
decoder_optimizer = optim.Adam(decoder.parameters(), lr=learning_rate)
这也让您可以自由地独立改变参数作为学习率。如果您不需要它,您可以创建一个新的 class 继承自 nn.Module
并包含网络、编码器和解码器,或者创建一组参数以提供给优化器,如解释的那样 here:
nets = [encoder, decoder]
parameters = set()
for net in nets:
parameters |= set(net.parameters())
其中 |
是此上下文中集合的联合运算符。
给出的示例 here 分别为 encoder
和 decoder
使用了两个优化器。为什么?什么时候这样做?
如果你有多个网络(在从 nn.Module
继承的多个对象的意义上),你必须这样做,原因很简单:当构造一个 torch.nn.optim.Optimizer
对象时,它需要应该作为参数优化的参数。你的情况:
encoder_optimizer = optim.Adam(encoder.parameters(), lr=learning_rate)
decoder_optimizer = optim.Adam(decoder.parameters(), lr=learning_rate)
这也让您可以自由地独立改变参数作为学习率。如果您不需要它,您可以创建一个新的 class 继承自 nn.Module
并包含网络、编码器和解码器,或者创建一组参数以提供给优化器,如解释的那样 here:
nets = [encoder, decoder]
parameters = set()
for net in nets:
parameters |= set(net.parameters())
其中 |
是此上下文中集合的联合运算符。