2017-09-23 64 views

回答

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()) 

其中|是在这种情况下集合的联合运算符。

+0

感谢您的回答。那么这是否意味着如果我们只有从'nn.Module'继承的编码器和解码器类,简单地将编码器的隐藏流传送到解码器(例如'enc_out,enc_hidden = encoder(x); dec_out =解码器(y,enc_hidden)')并且只使用一个'optimizer'在这种情况下不起作用? – Edityouprofile

+0

@displayname我不太明白你想要做什么。你能否详细说明你的问题 – McLawrence

+0

抱歉,迟到的回复,我认为你提到的两种方法是标准的方法来做到这一点。 – Edityouprofile

相关问题