问题标签 [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 投票
3 回答
56406 浏览

python - TensorFlow中如何选择交叉熵损失?

分类问题,例如逻辑回归或多项逻辑回归,可优化交叉熵损失。通常,交叉熵层在softmax层之后,产生概率分布。

在张量流中,至少有十几种不同的交叉熵损失函数

  • tf.losses.softmax_cross_entropy
  • tf.losses.sparse_softmax_cross_entropy
  • tf.losses.sigmoid_cross_entropy
  • tf.contrib.losses.softmax_cross_entropy
  • tf.contrib.losses.sigmoid_cross_entropy
  • tf.nn.softmax_cross_entropy_with_logits
  • tf.nn.sigmoid_cross_entropy_with_logits
  • ...

哪一个只适用于二元分类,哪一个适用于多类问题?什么时候应该使用sigmoid而不是softmax?功能sparse与其他功能有何不同,为什么只有softmax

相关(更多面向数学的)讨论:Keras 和 TensorFlow 中所有这些交叉熵损失之间有什么区别?.

0 投票
1 回答
12591 浏览

torch - pytorch nn.CrossEntropyLoss() 中的交叉熵损失

也许有人可以在这里帮助我。我正在尝试计算我的网络给定输出的交叉熵损失

和所需的标签,其形式为

其中 x 是 0 到 9 之间的整数。根据 pytorch 文档(http://pytorch.org/docs/master/nn.html

这应该可以,但不幸的是我遇到了一个奇怪的错误

谁能帮我?我真的很困惑,几乎尝试了所有我能想象到的有用的东西。

最好的

0 投票
1 回答
1260 浏览

machine-learning - Tensorflow - 使用 tf.losses.hinge_loss 导致 Shapes Incompatible 错误

我当前使用的代码sparse_softmax_cross_entropy工作正常。

但是,当我尝试使用hinge_loss

它报告了一个错误说:

该错误似乎源于losses_impl.py文件中的此函数:

我修改了我的代码如下,只提取 logits 张量的 1 列:

但它仍然报告类似的错误:

有人可以帮忙指出为什么我的代码可以正常工作,sparse_softmax_cross_entropy但不能正常工作hinge_loss吗?

0 投票
2 回答
2309 浏览

tensorflow - softmax_cross_entropy_with_logits 和 loss.log_loss 有什么区别?

tf.nn.softmax_cross_entropy_with_logits和之间的主要区别是tf.losses.log_loss什么?这两种方法都接受 1-hot 标签和 logits 来计算分类任务的交叉熵损失。

0 投票
2 回答
54486 浏览

python - 我的交叉熵函数的实现有什么问题?

我正在学习神经网络,我想cross_entropy用 python 编写一个函数。它被定义为

交叉熵

其中N是样本数,k是类数, 是log自然对数,t_i,j如果样本i在类中,则为 1 j0否则为 1,并且是样本在类p_i,j中的预测概率。为避免对数出现数值问题,请将预测剪裁到范围。ij[10^{−12}, 1 − 10^{−12}]

根据上面的描述,我通过将预测裁剪到范围来写下代码[epsilon, 1 − epsilon],然后根据上面的公式计算 cross_entropy。

下面的代码将用于检查函数cross_entropy是否正确。

上述代码的输出为 False,也就是说我定义函数cross_entropy的代码不正确。然后我打印cross_entropy(predictions, targets). 它给出0.178389544455了正确的结果应该是ans = 0.71355817782。有人可以帮我检查我的代码有什么问题吗?

0 投票
2 回答
38 浏览

python - 理解张量流函数输出

有人可以解释为什么下面的代码会生成输出array([ 0.59813887, 0.69314718], dtype=float32)吗?例如,numpy.log(0.5) = 0.69314718,但是 0.598138 是怎么来的?

0 投票
0 回答
132 浏览

tensorflow - 我如何自己实现 tf.nn.sparse_softmax_cross_entropy

我想自己实现 tf.nn.sparse_softmax_cross_entropy。但是经过一些批次后,损失变成了nan!

有我的代码:

logits 与 tf.nn.sparse_softmax_cross_entropy 中的 logits 相同,这是一个二维张量,tgt_seq 也是一个二维张量。我的任务是一个序列到序列的学习任务。

谁能帮我?


0 投票
0 回答
354 浏览

python - tensorflow不同的计算机相同的代码不同的结果

在训练过程中使用tf.nn.softmax_cross_entropy_with_logits时,结果经常给出nan异常大的交叉熵值

(Windows 7 64 位 Python 3.6 (Anaconda 4.4.0) Tensorflow 1.4 NVIDIA Titan X Pascal CUDA 8.0 CUDNN 6.0。)

Epoch00 交叉熵:1.288 L2_loss:1247.340 成本:32.489

Epoch01 交叉熵:0.936 L2_loss:1019.474 成本:23.868

Epoch02 交叉熵:0.550 L2_loss:880.814 成本:14.669

Epoch03 交叉熵:0.331 L2_loss:796.639 成本:9.435

Epoch04 CrossEntropy: nan L2_loss: nan 成本: nan

Epoch05 CrossEntropy: nan L2_loss: nan 成本: nan

但这不会发生在另一台计算机上。完全相同的代码,相同的数据。

(Windows 7 64 位 Python 3.6(Anaconda 4.4.0)Tensorflow 1.3 NVIDIA GeForce GTX TITAN X CUDA 8.0 CUDNN 7.0)

Epoch00 交叉熵:1.277 L2_loss:1247.637 成本:32.244

Epoch01 交叉熵:0.938 L2_loss:1018.631 成本:23.917

Epoch02 交叉熵:0.575 L2_loss:878.269 成本:15.250

Epoch03 交叉熵:0.345 L2_loss:795.507 成本:9.766

Epoch04 交叉熵:0.240 L2_loss:741.619 成本:7.226

Epoch05 交叉熵:0.193 L2_loss:704.291 成本:6.051

我也在 Linux Env​​inronment 中尝试过,但结果会给出 nan 或 big 交叉熵值。有人对这个问题有任何想法吗?

0 投票
0 回答
296 浏览

tensorflow - Keras 中每个样本的每个类别的单独权重

在 Keras(tensorflow 后端)中,我可以通过一个参数对类进行加权,并且还有另一个参数允许对样本进行加权(正如在这个问题中引用的那样。

在我的情况下,我需要同时做这两个:每个样本都应该对我拥有的两个类别中的每一个都有一个单独的权重。我的问题是,我不仅对两个班级的每个样本都有一个权重,而且两个班级都需要每个样本的单独权重。

我怎样才能做到这一点?

0 投票
1 回答
664 浏览

tensorflow - TensorFlow logits 和标签错误,但形状相同

这个问题已经被问过好几次了,但我似乎无法使以前的解决方案适应我的代码。因此,我将不胜感激有关如何解决此问题的任何建议。我曾尝试使用 pdb 并在问题出现之前设置一个跟踪点,但这并没有给我太多信息。我正在根据我的问题调整本教程: https ://www.oreilly.com/ideas/visualizing-convolutional-neural-networks

数据形状:

发生错误的地方:

我收到以下错误消息:

按照教程,我认为登录是在这里设置的:

print(Ylogits.shape) 这里给了我:(?, 30)。课程设置为 30,所以这似乎是有道理的。

这似乎是不起作用的功能,所以我打印了形状:

这给了我:

在执行上面的反向传播行时,尽管这似乎不起作用。任何人都可以帮忙吗?


回应评论(这基本上是上面提到的链接中的教程代码):

占位符:

模型: