当我们的标签向量中有实值条目(例如,在 0 和 1 之间浮动作为灰度值从 0 到 256 的标准化表示)时,我一直认为如果我们想测量之间的距离/误差,我们会使用 MSE(R2-loss)输入和输出或网络的一般输入和标签。另一方面,我也一直认为,只有在我们尝试预测概率并且地面实况标签条目是实际概率时才使用二元交叉熵。
现在,当使用通过 tensorflow 加载的 mnist 数据集时,如下所示:
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
每个条目都是一个 float32,范围在 0 和 1 之间。
自动编码器的 tensorflow教程使用 R2-loss/MSE-loss 来测量重建损失。
其中变分自动编码器的 tensorflow教程使用二元交叉熵来测量重建损失。
有人可以告诉我为什么,基于具有相同值的相同数据集(它们都是实际上代表像素值的数值),它们对自动编码器使用 R2-loss/MSE-loss,对变分使用 Binary-Cross-Entropy 损失自动编码器。
我认为不用说,这两个损失函数都应用于 sigmoid 输出。