计算dcgan跟踪中的损耗

时间:2019-09-24 22:25:01

标签: tensorflow loss-function discriminator cross-entropy gan

这是该帖子的后续内容: Calculating loss in dcgan已选择答案,但对我来说似乎不合适。

总结:在tensor flow tutorial about dcgan中,他们定义了这样的损失函数:

def generator_loss(generated_output):
    return tf.losses.sigmoid_cross_entropy(tf.ones_like(generated_output), generated_output)

问题是为什么他们使用“ tf.ones_like(generated_output)”。大卫·帕克斯(David Parks)对前面提到的帖子的回答是,这是因为

  

鉴别器输出在[0,1]范围内

我以为是这种情况,但后来我发现鉴别器实际上并没有返回0到1之间的值。

鉴别符的定义以:

结尾
model.add(tf.keras.layers.Dense(1))

而不是:

model.add(tf.keras.layers.Dense(1))
model.add(tf.keras.layers.Activation("sigmoid"))

如我所愿。

4个生成的图片和4个真实图片的鉴别器的输出(经过几个时期)实际上看起来像:

GENERATED:  tf.Tensor(
[[-1.5261561 ]
 [-2.6044064 ]
 [-0.55789095]
 [-1.0553275 ]], shape=(4, 1), dtype=float32)
REAL:  tf.Tensor(
[[ 2.048546 ]
 [ 2.900073 ]
 [-2.3295398]
 [-1.098418 ]], shape=(4, 1), dtype=float32)

我认为区分器的这种设计可能是一个错误,并且事实上仍然可行,这也许是偶然的。因此,我尝试将S型激活层添加到鉴别器中,但这实际上严重降低了性能。经过几个时期后,它的输出看起来像这样:

GENERATED:  tf.Tensor(
[[1.5318394e-05]
 [5.3527951e-04]
 [3.1036139e-04]
 [6.9439411e-06]], shape=(4, 1), dtype=float32)
REAL:  tf.Tensor(
[[1.1146069e-05]
 [1.4841557e-05]
 [5.9306622e-06]
 [5.2452087e-06]], shape=(4, 1), dtype=float32)

所以现在我完全迷路了。还有其他解释吗?我正在尝试重新制作脚本以生成其他(彩色)图像,但是它不会学习(它只会生成疯狂的噪音),我怀疑这可能是原因的一部分。

0 个答案:

没有答案