我正在CIFAR10数据集上使用这种降噪自动编码器的实现,该数据集已缩放到 [0,1]。我的超参数是 -
Adam optimizer
lr = 0.0001
sigmoid activations for both encoder and decoder
512 hidden nodes
Batch size = 50
在将损失函数设置为交叉熵时,它在第一个训练步骤开始时非常大。但随后它在 0 个步骤内收敛到 3 让我怀疑。经过一会儿训练后,我将图像传递到 AE 中,在评估解码层的输出时,它们都是 1 或接近它,而不是原始图像值。
我对正在发生的事情略有了解。交叉熵损失在代码中定义为 -
tf.reduce_sum(self.input_data * tf.log(self.decode))
如果解码层的值全部为 1,则tf.log(self.decode)
接近于零。因此,网络优化其隐藏权重,使输出接近 1,从而使交叉熵等于零。我说的对吗?
我该如何解决此问题?
这不是交叉熵损失。对于伯努利输出变量(由于您使用的是 sigmoid,这意味着它们是伯努利),它应该是
-tf.reduce_sum(
self.input_data * tf.log(self.decode) +
(1-self.input_data)*(tf.log(1-self.decode)))