Keras 中损失函数的含义?

Meaning of Loss function in Keras?

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

所以这里首先是一些一般信息: 我使用 classes 0-9 处理扑克牌手数据集,我用 OneHotEncoding 将其写为向量。我在最后一层使用了 softmax 激活,所以我的输出告诉我对于向量中的 10 个条目中的每一个,样本属于某个 class 的概率。例如: 我的真实输入是(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% 属于 class 0 , 20% 到 class 1 等等!

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

请大家帮忙!

首先,根据您的问题定义,您有一个多 class 问题。因此,您应该使用 categorical_crossentropy。二进制 cross_entropy 用于双 class 问题或多标签 class化。
但一般损失函数的取值有一个相对的影响值。首先,您必须了解 cross_entropy 的含义。公式为:

在哪里 c 是观察 o 和
的正确class化 y 是二元指标(0 或 1),如果 class 标签 c 是观察 o 的正确 class 化并且 p 是 o 属于 class c 的预测概率。
对于二元交叉熵,M 等于 2。对于分类交叉熵,M>2。 因此,如果预测概率收敛到实际标签,则交叉熵减小:

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