我正在尝试了解GAN,并正在通过the example here进行工作。无法访问TensorFlow Adam优化程序名称空间
下面使用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)
错误我认为亚当优化走的是变量纳入自己的命名空间但由于某些原因,他们没有初始化。我在代码中稍后调用global_variables_initializer
,正如可以在github页面上看到的那样。我正在通过文档检查,我认为这可能与我不得不在某处放置某种reuse_variables()
电话相关,但我不确定。
任何帮助非常感谢。
我不知道,这个例子是按照最好的一个,考虑到它使用两个优化的鉴别。它可以使用已经定义的d_loss来使用单个优化器,可能完全避免这个问题。 – jasekp
此外,鉴别器输出激活是线性的,它应该是一个sigmoid(或其他范围从0到1的其他东西)。这解释了为什么鉴别器分类在0时步结果为负的原因。 – jasekp
@jasekp那么你会建议什么?有一个鉴别器优化器仍然给我错误。我想得到这个工作,并理解亚当优化器,因为我认为这是什么问题在这里。我可以随时查看更多示例吗?任何想法如何让它工作?谢谢! –