问题标签 [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.
machine-learning - 二元交叉熵惩罚 one-hot 向量的所有分量
我知道在两个类的情况下,二元交叉熵与分类交叉熵相同。
此外,我很清楚 softmax 是什么。
因此,我看到分类交叉熵只会惩罚应该为 1 的一个分量(概率)。
但是为什么,不能或不应该在单热向量上使用二元交叉熵?
我看到在二进制交叉熵中,零是一个目标类,并且对应于以下 one-hot 编码:
总结:为什么我们只计算/总结预测类的负对数似然性。为什么我们不惩罚其他应该是零/不那么类的课程?
万一使用二元交叉熵来处理单热向量。预期零标签的概率也会受到惩罚。
keras - Keras 如何处理分类交叉熵的 log(0)?
我有一个在 MNIST 上训练的神经网络,其损失函数为分类交叉熵。
出于理论目的,我的输出层是 ReLu。因此它的很多输出都是0。
现在我偶然发现了以下问题:
为什么我不会得到很多错误,因为我的输出中肯定会有很多零,我会记录下来。
这里,为方便起见,使用分类交叉熵的公式。
machine-learning - 我无法让 Caffe 工作
经过一番挣扎,我决定尝试一个最简单的任务,训练一个网络来分类一个数字是否为非负数。而我失败了...
我使用以下代码生成了数据。而且我不确定它是否正确。我从文件中读回数据,但它看起来是正确的......
网络看起来像这样
还有我试过的一组参数
我在 Windows 上运行 caffe.exe。我总是得到损失= 0,准确度= 0.5。
我知道我一定做错了什么,但我不知道从哪里看,好吧,除了挖掘源代码......
我发现 caffe 相当慢。对于 1080Ti 上每批 1024 项的 float[64] 数据,我每秒只进行了大约 16 次迭代。这是正常的还是我又做错了什么?
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) 的泰勒级数展开,但它根本不像那样工作。
machine-learning - 为什么 RNN 使用交叉熵作为损失函数
我对神经网络非常陌生,想知道为什么所有 RNN 示例,尤其是 char-rnns 都使用交叉熵损失函数作为其损失函数。我已经用谷歌搜索,但似乎无法在这种情况下遇到任何关于该功能的讨论。我被要求鼓励使用它并查看它的优点和缺点,因此我可以阅读的任何论文或资料将不胜感激。
machine-learning - xgboost:尽管有合理的准确性,但对数损失很大
我在二进制分类问题上训练了一个 xgboost 分类器。它产生 70% 的准确预测。然而,logloss 在 9.13 时非常大。我怀疑这可能是因为一些预测非常偏离目标,但我不明白为什么会发生 - 其他人使用 xgboost 在相同数据上报告的 logloss (0.55 - 0.6) 要好得多。
产生以下输出:
有人知道我的高logloss的原因吗?谢谢!
tensorflow - Keras 和 TensorFlow 中所有这些交叉熵损失之间有什么区别?
所有这些交叉熵损失之间有什么区别?
Keras 在谈论
- 二元交叉熵
- 分类交叉熵
- 稀疏分类交叉熵
虽然 TensorFlow 有
- 使用 logits 的 Softmax 交叉熵
- 带有 logits 的稀疏 softmax 交叉熵
- 带 logits 的 Sigmoid 交叉熵
它们之间有什么区别和关系?它们的典型应用是什么?有什么数学背景?还有其他应该知道的交叉熵类型吗?有没有没有 logits 的交叉熵类型?
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 获得。
神经网络前向/后向传播:
激活函数实现:
损失函数实现:
python - 检查目标时出错:sparse_categorical_crossentropy 输出形状
我正在尝试使用迁移学习在一组新颖的图像上训练 InceptionV3。我遇到了这个问题 - 这显然与输入和输出维度的不匹配有关(我认为),但我似乎无法确定问题)。之前关于 SO 的所有相关帖子都与 VGG16(我已经开始工作)有关。这是我的代码:
这是错误:
任何帮助——即使是让我朝着正确的方向前进,都会有所帮助。
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: