keras - 如何在 keras 中计算非 0 或 1 的目标值的交叉熵

标签 keras deep-learning probability backpropagation cross-entropy

LeCun 建议不要训练神经网络通过输出 sigmoid 层输出 1 或 0(在论文“Efficient BackProp” - LeCun 等人,1998 年,第 4.5 节):

Choose target values at the point of the maximum second derivative on the sigmoid so as to avoid saturating the output units.

此处( https://machinelearningmastery.com/best-advice-for-configuring-backpropagation-for-deep-learning-neural-networks/ )建议使用值 0.9 和 0.1。

这提出了两个问题:

  1. 这可以使用 keras 实现吗? keras 的两个交叉熵函数(BinaryCrossentropyCategoricalCrossentropy)似乎都期望目标值为 1 或 0。
  2. 假设我有两个以上的类,预期值的总和将大于 1(即不是概率分布)。那是问题吗?我认为不会,只要您知道如何解释这些值。澄清一下,在这种情况下我宁愿不使用 softmax,而是坚持使用 sigmoid。通过坚持使用 sigmoid,我认为将每个类的输出解释为置信度度量会更容易,这与 Softmax 不同,在 Softmax 中,求幂会使这变得更加困难。所有类别的概率之和不等于 1,这一事实不应阻止我将每个类别的输出解释为概率/置信度度量 IIUC(我意识到这在数学意义上并不严格正确) ,但直觉上这对我来说是有意义的,如果我错了,请指出我的错误)。

最佳答案

keras 的两个交叉熵函数(BinaryCrossentropy 和 CategoricalCrossentropy)似乎都期望目标值为 1 或 0。

文档在撒谎;交叉熵是概率分布之间差异的度量——任何两个概率分布pq。实际上没有必要要求他们中的任何一个都是独热的。无论如何,BinaryCrossentropyCategoricalCrossentropy 都有一个 label_smoothing 参数,您可以将其用于此目的。 klabel_smoothing 将修改您的目标,如下所示:

smooth_targets = (1 - k)*hard_targets + k*uniform_targets

例如,在二进制情况下,0.1 的标签平滑将导致目标为 (0.05, 0,95) 而不是 (0, 1)。

我不太明白问题的第二部分,但这个想法可以推广到多个类。例如。对于 10 个类,对于真正的类,您可以使用 0.91 而不是 1,对于其他类,可以使用 0.01 而不是 0。总和仍然为 1。

关于keras - 如何在 keras 中计算非 0 或 1 的目标值的交叉熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76336103/

相关文章:

python - 训练神经网络,我无法弄清楚我的学习曲线

python - Keras:如何保存模型并继续训练?

python - 无法在 matlab 中导入 keras(python 生成)模型 - 不存在的字段 "class_name"

python - 小图像分类任务的 Conv2d 层和滤波器的数量

deep-learning - 逐帧处理视频时出现对象检测 "consistency"

vba - 直到循环输入框无限循环

algorithm - 将水果放入盒子中的最小 Action

python - 为什么不使用均方误差来解决分类问题?

python - Keras 嵌套模型单独保存和加载权重或查看所有嵌套模型的摘要

swift - 快速增加随机数概率