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