在去噪自动编码器中使用交叉熵损耗使输出饱和



我正在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)))

相关内容

  • 没有找到相关文章

最新更新