我正在嘗試瞭解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那麼你會建議什麼?有一個鑑別器優化器仍然給我錯誤。我想得到這個工作,並理解亞當優化器,因爲我認爲這是什麼問題在這裏。我可以隨時查看更多示例嗎?任何想法如何讓它工作?謝謝! –