Keras中损失函数的含义?

Posted

技术标签:

【中文标题】Keras中损失函数的含义?【英文标题】:Meaning of Loss function in Keras? 【发布时间】:2020-08-18 16:43:32 【问题描述】:

我在 python 中用 keras 做了一个神经网络,并不能真正理解损失函数的含义。

所以这里首先是一些一般信息: 我使用 0-9 类的扑克手数据集,我用 OneHotEncoding 将其写为向量。我在最后一层使用了 softmax 激活,所以我的输出告诉我对于向量中的 10 个条目中的每一个,样本是否属于某个类的概率。例如: 我的真实输入它(0,1,0,0,0,0,0,0,0,0),表示class 1(从0-9表示从无牌到同花顺),class 1表示一对(如果你知道扑克)。 使用神经网络,它会得到类似 (0.4, 0.2, 0.1, 0.1, 0.2, 0,0,0,0,0) 的输出,这意味着我的样本有 40% 属于 0 类,有 20%到第 1 课,依此类推!

好吧!我还使用二进制 cross_entropy 作为损失、准确度指标和 RMSprop-Optimizer。 当我使用 keras 的 mode.evaluate() 时,我得到了类似于 0.16 的损失,我不知道如何解释这一点。 这是否意味着,平均而言,我的预测与真实的偏差为 0.16?所以如果我对 0 类的预测是 0.5,它也可能是 0.66 或 0.34? 或者我该如何解释?

请发送帮助!

【问题讨论】:

当你遇到多类问题时为什么要使用二元交叉熵? developers.google.com/machine-learning/crash-course/… 可能是一个很好的开始阅读。了解损失后,您就可以查看模型中使用的损失。也应该是 MSE。 感谢 Jason,我想我理解损失,我的问题更多是 keras model.evaluate() 的计算!我使用二元交叉熵,因为我使用第一个 OneHotEncoding 【参考方案1】:

首先,根据您的问题定义,您有一个多类问题。因此,您应该使用 categorical_crossentropy。 Binary cross_entropy 用于二分类问题或多标签分类。 但是一般损失函数的值都有一个相对的影响值。首先,您必须了解 cross_entropy 的含义。公式为: 在哪里 c 是观察 o 的正确分类和 如果类标签 c 是观察 o 的正确分类,并且 p 是 o 属于 c 类的预测概率,则 y 是二进制指示符(0 或 1)。 对于二元交叉熵,M 等于 2。对于分类交叉熵,M>2。 因此,如果预测概率收敛到实际标签,则交叉熵减小:

现在让我们以您的示例为例,您有 10 个类,您的实际输入是:(0,1,0,0,0,0,0,0,0,0)。 如果你有0.16的损失,则表示 这意味着您的模型已将 0.85 分配给正确的标签。 因此,损失函数为您提供正确分类概率的对数。在 keras 中,损失是在整个批次上计算的,它是特定批次中整个数据的正确分类概率的对数的平均值。如果您使用evaluate 函数,则它是您正在评估的整个数据的正确分类概率的对数的平均值。

【讨论】:

谢谢!这正是我想看到/听到的 :) 我现在明白了!但还有一个问题。如果我使用 OneHotEncoding 将我的 10 个类表示为向量或数组,这意味着类 0 为 (1,0,0,...),类 1 为 (0,1,0,0,...)等等-为什么我不应该使用二元交叉熵?

以上是关于Keras中损失函数的含义?的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中基于输入数据的自定义损失函数

Keras 中的自定义损失函数(IoU 损失函数)和梯度误差?

Keras 模型的验证损失与损失函数输出不匹配

Keras中验证集的不同损失函数

Keras 中的 .fit() 方法触发损失函数多少次

Keras 自定义损失函数 - 生存分析截尾