当前网络上的关于VAE模型损失函数尤其是重构损失这里,有的使用均方差损失MSE,有的使用二分类交叉熵。那么,到底该使用哪一种或者说两者都可以?
一、均方差损失
loss_MSE = torch.nn.MSELoss(reduction = ‘sum’)
这个自不必说,是合理的
二、交叉熵
loss_BCE = torch.nn.BCELoss(reduction = ‘sum’)
或
F.binary_cross_entropy(x_reconst, x, size_average=False)
理论上来说,交叉熵适用于伯努利分布这样的二元概率分布。当前网上给出的VAE模型使用的数据是minist手写数字数据集。
Mnist数据集
Mnist数据集分为两部分,60000张训练集和10000张测试集。图片为28X28个像素。Mnist数据集把代表一张图片的二维数据转开成一个向量,长度为28X28=784。训练集是一个形状为[60000, 784]的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点,图片里的某个像素的强度值介于0-1之间。
那么,对于每个值在[0, 1]区间的minist数据集的训练,用交叉熵做重构损失是否合理呢?对于其它非minist数据集呢?