问题标签 [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.
python - 如果我使用许多 relus 的网络,为什么我的交叉熵损失函数会变得很大?
我有这个损失函数:
train_logits
由如下构建的管道定义:
、和layer_sizes
的构造如下:weights
biases
如果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
相反,这种损失的增加不会发生 - 它保持大致相同,正如我所期望的那样。
tensorflow - 训练 CNN 时大输入的 NaN 中的 Tensorflow 熵
我用 TensorFlow 创建了一个简单的卷积神经元网络。当我使用边缘 = 32px 的输入图像时,网络工作正常,但如果我将边缘两次增加到 64px,那么熵将返回为 NaN。问题是如何解决这个问题?
CNN 结构非常简单,看起来像: input->conv->pool2->conv->pool2->conv->pool2->fc->softmax
熵计算如下:
对于 64 像素,我有:
对于 32px,它看起来很好,训练给出了结果:
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_mean
y 和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
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)
应该给我错误,因为预测和标签不一样。为什么我没有在交叉熵函数中得到目标超出范围错误?
这是错误堆栈。
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
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 缩放是否会导致错误结果?
谢谢,
罗恩
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
?
classification - Caffe 产生负损失值(使用 lmdb 进行多标签分类)
我正在尝试基于 lmdb 数据库进行多标签分类。我创建了两个不同的数据库。一个用于图像本身,一个用于标签。我的意图是为水平和垂直方向的角度设置 2 个不同的标签。这意味着 label1 [0-360] label2 [0-360]。
为此,我的代码如下:
我的train.txt
样子:/path/to/image label1 label2
wherelabel1
和label2
是整数。
我的train_val.prototxt
样子是这样的:
测试阶段的部分是相同的
我的损失层如下所示: