私はGANについて学びたいと思っています。私はthe example hereを使って作業しています。TensorFlow Adamオプティマイザネームスペースにアクセスできない
アダム・オプティマイザを使用して、以下のコードは私にエラー
"ValueError: Variable d_w1/Adam/ does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=None in VarScope?"
を与える私はTF 1.1.0
d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=Dx, labels=tf.fill([batch_size, 1], 0.9)))
d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=Dg, labels=tf.zeros_like(Dg)))
d_loss = d_loss_real + d_loss_fake
tvars = tf.trainable_variables()
d_vars = [var for var in tvars if 'd_' in var.name]
g_vars = [var for var in tvars if 'g_' in var.name]
# Train the discriminator
# Increasing from 0.001 in GitHub version
with tf.variable_scope(tf.get_variable_scope(), reuse=False) as scope:
# Next, we specify our two optimizers. In today’s era of deep learning, Adam seems to be the
# best SGD optimizer as it utilizes adaptive learning rates and momentum.
# We call Adam's minimize function and also specify the variables that we want it to update.
d_trainer_real = tf.train.AdamOptimizer(0.0001).minimize(d_loss_real, var_list=d_vars)
d_trainer_fake = tf.train.AdamOptimizer(0.0001).minimize(d_loss_fake, var_list=d_vars)
を使用している私は、アダム・オプティマイザは、独自の名前空間に変数を取っていると思います何らかの理由で初期化されていません。 githubページにあるように、後でglobal_variables_initializer
というコードを呼び出します。私は文書を調べていますが、私はそれがreuse_variables()
コールを何か入れなければならないことに関連しているかもしれないと思いますが、わかりません。
ご迷惑をおかけして申し訳ございません。
ディスクリミネータ用に2つのオプティマイザを使用していることを考慮して、この例がベストプラクティスであるかどうかはわかりません。すでに定義されているd_lossを使用して単一のオプティマイザを使用すると、この問題を完全に回避することができます。 – jasekp
また、弁別器出力の活性化は線形であり、シグモイド(または0から1の範囲のもの)でなければならない。これは、識別器の分類が0タイムステップの結果で否定的な理由を説明します。 – jasekp
@ jasekpだからあなたは何をアドバイスしますか? discriminatorのための1つのオプティマイザを持つことは、まだ私にエラーを与える。私はこれを働かせて、Adamオプティマイザを理解したいと思っています。問題が何であるかと思います。私はいつも後でもっと例を見ることができますか?どのように私はそれが働くことができる任意のアイデア?ありがとう! –