J'essaie d'en savoir plus sur les GAN et je travaille sur the example here.Impossible d'accéder à l'espace de noms de l'optimiseur TensorFlow Adam
Le code ci-dessous en utilisant l'optimiseur Adam me donne l'erreur
"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?"
J'utilise 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)
Je pense que l'optimiseur Adam prend les variables dans son propre espace de noms mais pour une raison quelconque, ils ne sont pas initialisés. J'appelle global_variables_initializer
plus tard dans le code, comme on peut le voir sur la page github. Je vérifie à travers la documentation, je pense que cela peut être lié à moi avoir à mettre une sorte de reuse_variables()
appel là-bas, mais je ne suis pas sûr.
Toute aide très appréciée.
Je ne suis pas sûr que cet exemple soit le meilleur à suivre, étant donné qu'il utilise deux optimiseurs pour le discriminateur. Il pourrait utiliser le d_loss déjà défini pour utiliser un seul optimiseur, évitant potentiellement ce problème tout à fait. – jasekp
De plus, l'activation de la sortie du discriminateur est linéaire, où il devrait s'agir d'un sigmoïde (ou autre chose avec une plage de 0 à 1). Ceci explique pourquoi la classification discriminante est négative aux résultats de 0 temps. – jasekp
@jasekp Alors, que conseilleriez-vous? Avoir un optimiseur pour discriminateur me donne toujours l'erreur. Je voudrais que cela fonctionne et comprenne l'optimiseur d'Adam car je pense que c'est ce que le problème est ici. Je peux toujours vérifier plus d'exemples après? Une idée de comment je peux le faire fonctionner? Merci! –