2017-09-23 3 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'から継承した' encoder'クラスと 'decoder'クラスだけを持っていれば、エンコーダーのヒッデンズをデコーダーに簡単にパイプライン化します(例えば' enc_out、enc_hidden = encoder(x); dec_out =デコーダ(y、enc_hidden) ')と' 'オプティマイザ ''を1つだけ使用すると、この状況では動作しませんか? – Edityouprofile

+0

@displayname私はあなたが何をしようとしているのかよく分かりません。 – McLawrence

+0

ご返信いただきまして申し訳ありませんが、あなたが言及した2つの方法はこれを行う標準的な方法だと思います。 – Edityouprofile

関連する問題