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

时间:2017-11-01 17:49:31

标签: neural-network deep-learning autoencoder

我在CIFAR10数据集上使用此implementation去噪自动编码器,该数据集已缩放为[0,1]。 我的超参数是 -

Adam optimizer 
lr = 0.0001
sigmoid activations for both encoder and decoder
512 hidden nodes
Batch size = 50

在将损失函数设置为交叉熵时,它在第一个训练步骤开始时相当大。但随后它在3个步骤中收敛到0,这让我很怀疑。经过一段时间的训练后,我将图像传递到AE中,并且在评估解码层的输出时,它们都是1或接近它而不是原始图像值。

我对发生的事情略有了解。交叉熵损失在代码中定义为 -

tf.reduce_sum(self.input_data * tf.log(self.decode))

如果解码层的值为全1,则tf.log(self.decode)接近于零。因此,网络优化其隐藏权重,使得输出接近1,使得交叉熵等于零。我是对的吗?

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是交叉熵损失。对于bernoulli输出变量(因为你使用sigmoids这意味着它们是bernoullis)它应该是

-tf.reduce_sum(
  self.input_data * tf.log(self.decode) + 
  (1-self.input_data)*(tf.log(1-self.decode)))