【发布时间】:2018-09-03 22:36:02
【问题描述】:
我看到很多关于 CEL 或二元交叉熵损失的解释,在基本事实是 0 或 1 的上下文中,然后你会得到如下函数:
def CrossEntropy(yHat, y):
if yHat == 1:
return -log(y)
else:
return -log(1 - y)
但是,当您的 yHat 不是离散的 0 或 1 时,我对 BCE 的工作方式感到困惑。例如,如果我想查看一个 MNIST 数字的重建损失,其中我的基本事实是 0
编辑:
抱歉,让我为我的困惑提供更多背景信息。在有关 VAE 的 PyTorch 教程中,他们使用 BCE 来计算重建损失,其中 yhat(据我所知,不是离散的)。见:
https://github.com/pytorch/examples/blob/master/vae/main.py
实现工作......但我不明白在这种情况下如何计算 BCE 损失。
【问题讨论】:
-
对于带有图像的自动编码器,您可以将像素值标准化为
[0, 1]范围,然后使用 BCE 逐像素 -
当然可以,但他们就是在这里做的吗?
-
在您发布的代码中,该代码处理的不仅仅是 0 和 1。第一个
if语句处理1的情况,但else语句处理所有其他值,不仅仅是0。 -
查看 pytorch.org/docs/master/… 和 pytorch.org/docs/master/nn.html#torch.nn.BCEWithLogitsLoss 他们从数据中获取 sigmoid 函数,因此它被归一化为
[0, 1] -
@stackoverflowuser2010 - 是的,但是如果它采用任何不是 0 或 1 的值,则此代码将无法正常工作(如计算正确的 CE 损失)。
标签: python machine-learning neural-network loss-function