问题标签 [cross-entropy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2282 浏览

machine-learning - 二元交叉熵惩罚 one-hot 向量的所有分量

我知道在两个类的情况下,二元交叉熵与分类交叉熵相同。

此外,我很清楚 softmax 是什么。
因此,我看到分类交叉熵只会惩罚应该为 1 的一个分量(概率)。

但是为什么,不能或不应该在单热向量上使用二元交叉熵?

我看到在二进制交叉熵中,是一个目标类,并且对应于以下 one-hot 编码:

总结:为什么我们只计算/总结预测类的负对数似然性。为什么我们不惩罚其他应该是零/不那么类的课程?

万一使用二元交叉熵来处理单热向量。预期零标签的概率也会受到惩罚。

0 投票
2 回答
1509 浏览

keras - Keras 如何处理分类交叉熵的 log(0)?

我有一个在 MNIST 上训练的神经网络,其损失函数为分类交叉熵。

出于理论目的,我的输出层是 ReLu。因此它的很多输出都是0。

现在我偶然发现了以下问题:

为什么我不会得到很多错误,因为我的输出中肯定会有很多零,我会记录下来。

这里,为方便起见,使用分类交叉熵的公式。

L = \sum_{i=1}^m \sum_j L_{i,j} \log y_{i,j}

0 投票
1 回答
36 浏览

machine-learning - 我无法让 Caffe 工作

经过一番挣扎,我决定尝试一个最简单的任务,训练一个网络来分类一个数字是否为非负数。而我失败了...

我使用以下代码生成了数据。而且我不确定它是否正确。我从文件中读回数据,但它看起来是正确的......

网络看起来像这样

还有我试过的一组参数

我在 Windows 上运行 caffe.exe。我总是得到损失= 0,准确度= 0.5。

我知道我一定做错了什么,但我不知道从哪里看,好吧,除了挖掘源代码......


我发现 caffe 相当慢。对于 1080Ti 上每批 1024 项的 float[64] 数据,我每秒只进行了大约 16 次迭代。这是正常的还是我又做错了什么?

0 投票
1 回答
968 浏览

c++ - Caffe 中的交叉熵实现

查看sigmoid_cross_entropy_loss_layer.cpp中的源代码,这是caffe中交叉熵损失函数的源代码,我注意到实际错误值的代码是

这似乎与我在这里找到的 Caffe 或 C++ 实现文档中的 CE 损失函数有很大不同:

https://visualstudiomagazine.com/Articles/2014/04/01/Neural-Network-Cross-Entropy-Error.aspx?Page=2

或者实际上是 CE 损失函数的定义。

这是某种近似吗?我首先认为这是 log⁡(1−x) 的泰勒级数展开,但它根本不像那样工作。

0 投票
1 回答
3119 浏览

machine-learning - 为什么 RNN 使用交叉熵作为损失函数

我对神经网络非常陌生,想知道为什么所有 RNN 示例,尤其是 char-rnns 都使用交叉熵损失函数作为其损失函数。我已经用谷歌搜索,但似乎无法在这种情况下遇到任何关于该功能的讨论。我被要求鼓励使用它并查看它的优点和缺点,因此我可以阅读的任何论文或资料将不胜感激。

0 投票
1 回答
1829 浏览

machine-learning - xgboost:尽管有合理的准确性,但对数损失很大

我在二进制分类问题上训练了一个 xgboost 分类器。它产生 70% 的准确预测。然而,logloss 在 9.13 时非常大。我怀疑这可能是因为一些预测非常偏离目标,但我不明白为什么会发生 - 其他人使用 xgboost 在相同数据上报告的 logloss (0.55 - 0.6) 要好得多。

产生以下输出:

有人知道我的高logloss的原因吗?谢谢!

0 投票
2 回答
4796 浏览

tensorflow - Keras 和 TensorFlow 中所有这些交叉熵损失之间有什么区别?

所有这些交叉熵损失之间有什么区别?

Keras 在谈论

  • 二元交叉熵
  • 分类交叉熵
  • 稀疏分类交叉熵

虽然 TensorFlow 有

  • 使用 logits 的 Softmax 交叉熵
  • 带有 logits 的稀疏 softmax 交叉熵
  • 带 logits 的 Sigmoid 交叉熵

它们之间有什么区别和关系?它们的典型应用是什么?有什么数学背景?还有其他应该知道的交叉熵类型吗?有没有没有 logits 的交叉熵类型?

0 投票
1 回答
546 浏览

python - 神经网络损失开始增加,而 acc 在两个 train/val 数据集上都在增加

在过去的几天里,我一直在调试我的神经网络,但我找不到问题。

我创建了用于识别 MNIST 数据集图像的多层感知器的完整原始实现。

网络似乎在学习,因为经过训练周期测试数据的准确率超过 94%。我的损失函数有问题 - 它会在一段时间后开始增加,当测试/验证准确度达到 ~76% 时。

有人可以检查我的前向/反向传播数学并告诉我我的损失函数是否正确实现,或者建议可能有什么问题?

神经网络结构:

  • 输入层:758 个节点,(每个像素 1 个节点)
  • 隐藏层 1:300 个节点
  • 隐藏层 2:75 个节点
  • 输出层:10个节点

NN激活函数:

  • 输入层 -> 隐藏层 1:ReLU
  • 隐藏层 1 -> 隐藏层 2:ReLU
  • 隐藏层 2 -> 输出层 3:Softmax

NN损失函数:

  • 分类交叉熵

完整的 CLEAN 代码可在此处作为 Jupyter Notebook 获得。

神经网络前向/后向传播:

激活函数实现:

损失函数实现:

0 投票
1 回答
1139 浏览

python - 检查目标时出错:sparse_categorical_crossentropy 输出形状

我正在尝试使用迁移学习在一组新颖的图像上训练 InceptionV3。我遇到了这个问题 - 这显然与输入和输出维度的不匹配有关(我认为),但我似乎无法确定问题)。之前关于 SO 的所有相关帖子都与 VGG16(我已经开始工作)有关。这是我的代码:

这是错误:

任何帮助——即使是让我朝着正确的方向前进,都会有所帮助。

0 投票
1 回答
2016 浏览

python - Keras 自定义损失函数 dtype 错误

我有一个 NN,它有两个相同的 CNN(类似于 Siamese 网络),然后合并输出,并打算在合并的输出上应用自定义损失函数,如下所示:

在我的自定义损失函数中,我需要将 y 垂直分成两部分,然后对每一部分应用分类交叉熵损失。但是,我不断从我的损失函数中得到 dtype 错误,例如:

ValueError Traceback (last last call last) in () ----> 1 model.compile(loss=categorical_crossentropy_loss, optimizer=RMSprop())

/usr/local/lib/python3.5/dist-packages/keras/engine/training.py 在编译(自我,优化器,损失,指标,loss_weights,sample_weight_mode,**kwargs)909 loss_weight = loss_weights_list [i] 910 output_loss = weighted_loss(y_true, y_pred, --> 911 sample_weight, mask) 912 if len(self.outputs) > 1: 913 self.metrics_tensors.append(output_loss)

/usr/local/lib/python3.5/dist-packages/keras/engine/training.py in weighted(y_true, y_pred, weights, mask) 451 # 如果权重不是无,则应用样本加权 452:-> 453 score_array *= 权重 454 score_array /= K.mean(K.cast(K.not_equal(weights, 0), K.floatx())) 455 返回 K.mean(score_array)

/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/math_ops.py in binary_op_wrapper(x, y) 827 if not isinstance(y, sparse_tensor.SparseTensor): 828 try: --> 829 y = ops.convert_to_tensor(y, dtype=x.dtype.base_dtype, name="y") 830 except TypeError: 831 # 如果 RHS 不是张量,它可能是张量感知对象

/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py in convert_to_tensor(value, dtype, name, preferred_dtype) 674 name=name, 675 preferred_dtype=preferred_dtype, --> 676 as_ref =假)677 678

/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py in internal_convert_to_tensor(value, dtype, name, as_ref, preferred_dtype) 739 740 if ret is None: --> 741 ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref) 742 743 如果 ret 未实现:

/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py in _TensorTensorConversionFunction(t, dtype, name, as_ref) 612 raise ValueError( 613 "Tensor conversion requested dtype %s for Tensor with dtype %s: %r" --> 614 % (dtype.name, t.dtype.name, str(t))) 615 return t 616

ValueError:张量转换为 dtype float32 的张量请求 dtype float64:'Tensor("processed_a_b_sample_weights_1:0", shape=(?,), dtype=float32)'

这是重现错误的MWE: