首页 文章

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

提问于
浏览
1

我在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 回答

  • 1

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

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

相关问题