我正在尝试为一个项目构建一个 GAN,我真的很想了解这个在 tensorflow 的 variable_scope 中共享的变量是如何工作的。
为了构建 GAN,我有一个生成器网络和两个鉴别器网络:一个鉴别器输入真实图像,一个鉴别器输入由生成器创建的假图像。重要的是,输入真实图像的鉴别器和输入假图像的鉴别器需要共享相同的权重。为了做到这一点,我需要分享权重。
我有一个鉴别器和生成器定义,可以说:
def discriminator(images, reuse=False):
with variable_scope("discriminator", reuse=reuse):
#.... layer definitions, not important here
#....
logits = tf.layers.dense(X, 1)
logits = tf.identity(logits, name="logits")
out = tf.sigmoid(logits, name="out")
# 14x14x64
return logits, out
def generator(input_z, reuse=False):
with variable_scope("generator", reuse=reuse):
#.. not so important
out = tf.tanh(logits)
return out
现在生成器和鉴别器函数被调用:
g_model = generator(input_z)
d_model_real, d_logits_real = discriminator(input_real)
#Here , reuse=True should produce the weight sharing between d_model_real, d_logits_real
#and d_model_fake and d_logits_fake.. why?
d_model_fake, d_logits_fake = discriminator(g_model, reuse=True)
为什么第二次调用中的 reuse=True 语句会产生权重共享?据我了解,您需要决定在第一次调用中重用变量,以便您可以稍后在程序中的某个地方使用它们。
如果有人可以向我解释这一点,我会非常高兴,我找不到这个话题的好来源,而且对我来说似乎真的很混乱和复杂。谢谢!