Keras 理解深度自动编码器中丢失和激活的选择?

Keras 理解深度自动编码器中丢失和激活的选择?,keras,deep-learning,autoencoder,loss-function,activation-function,Keras,Deep Learning,Autoencoder,Loss Function,Activation Function,我遵循这个keras教程,使用MNIST数据集创建一个自动编码器。以下是教程: 然而,对于简单的单层自动编码器(这是链接中的第一个示例),我对激活和丢失的选择感到困惑。与诸如relu之类的东西相反,解码器部分使用了sigmoid激活是否有具体原因?我试图了解这是否是一个我可以玩弄的选择,或者它是否真的应该是sigmoid,如果是,为什么?类似地,我知道损失是通过逐像素比较原始数字和预测数字得出的,但我不确定为什么损失是binary\u crossentropy,而不是像均方误差这样的东西 我希望

我遵循这个keras教程,使用MNIST数据集创建一个自动编码器。以下是教程:

然而,对于简单的单层自动编码器(这是链接中的第一个示例),我对激活和丢失的选择感到困惑。与诸如
relu
之类的东西相反,解码器部分使用了
sigmoid
激活是否有具体原因?我试图了解这是否是一个我可以玩弄的选择,或者它是否真的应该是
sigmoid
,如果是,为什么?类似地,我知道损失是通过逐像素比较原始数字和预测数字得出的,但我不确定为什么损失是
binary\u crossentropy
,而不是像均方误差这样的东西


我希望澄清这一点,以帮助我向前迈进!谢谢大家!

MNIST图像通常在
[0,1]
范围内标准化,因此自动编码器应输出相同范围内的图像,以便于学习。这就是为什么在输出端使用
sigmoid
激活

均方误差损失具有非线性惩罚,大误差的惩罚大于小误差,这通常导致收敛到解的平均值,而不是更精确的解。二元交叉熵没有这个问题,因此它是首选。它之所以有效,是因为模型和标签的输出在
[0,1]
范围内,并且损耗应用于所有像素。

是将mse损耗与图像自动编码器一起使用的示例。其余内容请参见完整答案。