我正在按照这个keras教程来使用MNIST数据集创建自动编码器。这是本教程:https://blog.keras.io/building-autoencoders-in-keras.html。
但是,我对简单的单层自动编码器的激活和丢失选择感到困惑(这是链接中的第一个示例)。与sigmoid
之类的东西相比,解码器部分使用了relu
激活有特定的原因吗?我试图了解这是我可以选择的选择,还是应该确实是sigmoid
,如果可以,为什么?同样,我了解到损失是通过逐像素比较原始位和预测位来实现的,但是我不确定为什么损失为binary_crossentropy
而不是均方误差。
我希望澄清这一点,以帮助我前进!谢谢!
MNIST图像通常在[0, 1]
范围内归一化,因此自动编码器应在相同范围内输出图像,以便于学习。这就是在输出中使用sigmoid
激活的原因。
均方误差损失具有非线性损失,较大的误差比较小的误差具有更大的损失,这通常导致收敛到解的平均值,而不是更精确的解。二元交叉熵没有这个问题,因此是优选的。之所以可以使用它,是因为模型的输出和标签在[0, 1]
范围内,并且损失将应用于所有像素。