问题标签 [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 回答
2847 浏览

python - 如果我使用许多 relus 的网络,为什么我的交叉熵损失函数会变得很大?

我有这个损失函数:

train_logits由如下构建的管道定义:

、和layer_sizes的构造如下:weightsbiases

如果arg('act-func')是 relu,那么如果我构建一个长链 relu - 就像arg('layers')是一样[750, 750, 750, 750, 750, 750]- 那么我的损失函数是巨大的:

如果我有一个较短的 relus 链 -arg('layers')只是说[750]- 那么损失函数会更小:

我的问题是:为什么损失函数如此不同?据我了解,logits 的输出是 softmax 以产生概率分布。然后根据这个概率分布确定单热标签的交叉熵。为什么更改我拥有的 relus 数量会更改此功能?我认为每个网络在开始时都应该是同样错误的——大约是随机的——因此损失永远不会变得太大。

请注意,此损失函数不包含任何 l2 损失,因此增加的权重和偏差数量不会解释这一点。

使用arg('act-func')astanh相反,这种损失的增加不会发生 - 它保持大致相同,正如我所期望的那样。

0 投票
1 回答
199 浏览

tensorflow - 训练 CNN 时大输入的 NaN 中的 Tensorflow 熵

我用 TensorFlow 创建了一个简单的卷积神经元网络。当我使用边缘 = 32px 的输入图像时,网络工作正常,但如果我将边缘两次增加到 64px,那么熵将返回为 NaN。问题是如何解决这个问题?

CNN 结构非常简单,看起来像: input->conv->pool2->conv->pool2->conv->pool2->fc->softmax

熵计算如下:

对于 64 像素,我有:

对于 32px,它看起来很好,训练给出了结果:

0 投票
1 回答
4143 浏览

function - tensorflow:使用 reduce_mean 和 reduce_sum 理解交叉熵计算

我正在研究面向初学者的 Tensorflow 的基本神经网络 [1]。我无法理解熵值的计算及其使用方式。在示例中,创建了一个占位符来保存正确的标签:

交叉熵 sum y'.log(y) 计算如下:

看看我假设我们拥有的维度(元素明智的乘法):

y_ * log(y) = [批次 x 类别] x [批次 x 类别]

y_ * log(y) = [批次 x 类]

快速检查证实了这一点:

现在这是我不明白的。我的理解是,对于交叉熵,我们需要考虑y(predicted) 和y_(oracle) 的分布。所以我假设我们首先需要reduce_meany 和y_by 他们的列(按类)。然后我会得到2个大小的向量:

y_ = [类 x 1]

y = [类 x 1]

由于 y_ 是“正确的”分布,我们然后做一个(注意在示例中向量被翻转):

log(y_) = [ 类 x 1 ]

现在我们做一个元素明智的乘法:

yx 日志(y_)

这给了我们一个带有类长度的向量。最后我们简单地将这个向量相加得到一个值:

Hy(y_) = sum( yx log(y_) )

但是,这似乎不是正在执行的计算。谁能解释我的错误是什么?也许将我指向一些有很好解释的页面。除此之外,我们正在使用 one-hot 编码。所以 log(1) = 0 和 log(0) = -infinity 所以这会导致计算错误。我知道优化器会计算导数,但交叉熵不是还在计算吗?

TIA。

[1] https://www.tensorflow.org/versions/r0.9/tutorials/mnist/beginners/index.html

0 投票
0 回答
1401 浏览

python - Tensorflow tf.nn.in_top_k:目标超出范围错误?

我已经弄清楚是什么导致了这个错误,这是由于标签和输出之间的不匹配,就像我正在做 8 类情感分类,我的标签是 (1,2,3,4,7,8,9,10)所以它无法将预测(1,2,3,4,5,6,7,8)与我的标签匹配,这就是它给出超出范围错误的原因。我的问题是,为什么它在这一行没有给我错误,c_loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits,Y)在这种情况下它如何将标签与预测匹配,而不是在 in_top_k 中?我认为c_loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits,Y)应该给我错误,因为预测和标签不一样。为什么我没有在交叉熵函数中得到目标超出范围错误?

这是错误堆栈。

0 投票
2 回答
2072 浏览

python - 如何在 theano 上实现加权二元交叉熵?

如何在 theano 上实现加权二元交叉熵?

我的卷积神经网络只预测 0 ~~ 1 (sigmoid)。

我想以这种方式惩罚我的预测:

成本表

基本上,当模型预测为 0 但事实为 1 时,我想惩罚更多。

问题:如何使用 theano 和lasagne 创建这个加权二元交叉熵函数?

我在下面试过这个

但我在下面收到此错误:

TypeError:reshape 中的新形状必须是向量或标量列表/元组。转换为向量后得到 Subtensor{int64}.0。


参考:https ://github.com/fchollet/keras/issues/2115

参考:https ://groups.google.com/forum/#!topic/theano-users/R_Q4uG9BXp8

0 投票
1 回答
1129 浏览

neural-network - Tensorflow:具有交叉熵的缩放 logits

在 Tensorflow 中,我有一个分类器网络和不平衡的训练课程。由于各种原因,我不能使用重采样来补偿不平衡的数据。因此,我不得不通过其他方式来补偿不平衡,特别是根据每个类中的示例数将 logits 乘以权重。我知道这不是首选方法,但重采样不是一种选择。我的训练损失操作是tf.nn.softmax_cross_entropy_with_logits(我也可以尝试tf.nn.sparse_softmax_cross_entropy_with_logits)。Tensorflow 文档在这些操作的描述中包括以下内容:

警告:此操作需要未缩放的 logits,因为它在内部对 logits 执行 softmax 以提高效率。不要用 softmax 的输出调用这个操作,因为它会产生不正确的结果。

我的问题:上面的警告仅指softmax完成的缩放,还是意味着任何类型的任何logit缩放都被禁止?如果是后者,那么我的类重新平衡 logit 缩放是否会导致错误结果?

谢谢,

罗恩

0 投票
2 回答
30293 浏览

tensorflow - 损失增加的可能解释?

我有来自四个不同国家的 40k 图像数据集。图像包含多种主题:户外场景、城市场景、菜单等。我想使用深度学习对图像进行地理标记。

我从一个包含 3 个 conv->relu->pool 层的小型网络开始,然后再添加 3 个来加深网络,因为学习任务并不简单。

我的损失是这样做(使用 3 层和 6 层网络)在此处输入图像描述::

损失实际上开始有点平稳并下降了几百步,但随后开始爬升。

我的损失像这样增加的可能解释是什么?

我的初始学习率设置得很低:1e-6,但我也尝试过 1e-3|4|5。我已经对具有不同类别主题的两个类别的小型数据集进行了完整性检查,并且损失不断下降。训练准确率徘徊在 ~40%

0 投票
1 回答
11726 浏览

python - 交叉熵是nan

我正在部署我的 conv-deconv 网络。我的问题是交叉熵在训练时总是 nan ,所以求解器没有更新权重。我整天检查我的代码,但我不知道我哪里出错了。以下是我的架构: 在此处输入图像描述 这是我的交叉熵函数

其中ys的维度是[1,500,500,1],ys_reshape是[250000,1],relu4是[1,500,500,1],预测是[250000,1]。标签矩阵ys的值为{0,1},是一个二分类稠密预测。

如果我打印 train_step out,它将显示 None。谁能帮我?

0 投票
3 回答
18668 浏览

python - 如何使用 sparse_softmax_cross_entropy_with_logits 在张量流中实现加权交叉熵损失

我开始使用 tensorflow(来自 Caffe),并且正在使用 loss sparse_softmax_cross_entropy_with_logits。该函数接受标签,0,1,...C-1而不是 onehot 编码。现在,我想根据类标签使用权重;我知道如果我使用(一种热编码),这可以通过矩阵乘法来完成softmax_cross_entropy_with_logits,有没有办法做同样的事情sparse_softmax_cross_entropy_with_logits

0 投票
0 回答
499 浏览

classification - Caffe 产生负损失值(使用 lmdb 进行多标签分类)

我正在尝试基于 lmdb 数据库进行多标签分类。我创建了两个不同的数据库。一个用于图像本身,一个用于标签。我的意图是为水平和垂直方向的角度设置 2 个不同的标签。这意味着 label1 [0-360] label2 [0-360]。

为此,我的代码如下:

我的train.txt样子:/path/to/image label1 label2wherelabel1label2是整数。

我的train_val.prototxt样子是这样的:

测试阶段的部分是相同的

我的损失层如下所示: