问题标签 [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.
tensorflow - Tensorflow 加权与 sigmoid 交叉熵损失
我正在尝试使用 TensorFlow 实现多标签分类(即,每个输出模式可以有许多活动单元)。该问题具有不平衡的类别(即,标签分布中的零比零多得多,这使得标签模式非常稀疏)。
解决问题的最佳方法应该是使用该tf.nn.weighted_cross_entropy_with_logits
功能。但是,我收到此运行时错误:
我不明白这里有什么问题。作为损失函数的输入,我传递了标签张量、logits 张量和正类权重,这是一个常数:
关于如何解决这个问题的任何提示?如果我只是将相同的标签和 logits 张量传递给tf.losses.sigmoid_cross_entropy
损失函数,那么一切正常(在 Tensorflow 运行正常的意义上,但当然训练预测总是为零)。
在此处查看相关问题。
python - Keras:binary_crossentropy 和 categorical_crossentropy 混淆
在使用 TensorFlow 一段时间后,我阅读了一些 Keras 教程并实现了一些示例。keras.losses.binary_crossentropy
我找到了几个用作损失函数的卷积自动编码器教程。
我认为不binary_crossentropy
应该是多类损失函数,并且很可能会使用二进制标签,但实际上 Keras(TF Python 后端)调用,它实际上是用于具有多个不互斥的独立类的分类任务。tf.nn.sigmoid_cross_entropy_with_logits
另一方面,我的期望categorical_crossentropy
是用于多类分类,其中目标类相互依赖,但不一定是单热编码的。
但是,Keras 文档指出:
(...)当使用 categorical_crossentropy 损失时,您的目标应该是分类格式(例如,如果您有 10 个类,则每个样本的目标应该是一个 10 维向量,该向量是全零期望索引处为 1对应于样本的类别)。
如果我没记错的话,这只是 one-hot 编码分类任务的特例,但潜在的交叉熵损失也适用于概率分布(“多类”,依赖标签)?
此外,Keras 使用tf.nn.softmax_cross_entropy_with_logits
(TF python backend) 来实现,它本身声明:
注意:虽然这些类是互斥的,但它们的概率不必是. 所需要的只是每一行标签都是一个有效的概率分布。如果不是,则梯度的计算将不正确。
如果我错了,请纠正我,但在我看来,Keras 文档 - 至少 - 不是很“详细”?!
那么,Keras 命名损失函数背后的想法是什么?文档是否正确?如果二进制交叉熵真的依赖于二进制标签,它不应该适用于自动编码器,对吧?!同样,分类交叉熵:如果文档正确,则仅适用于单热编码标签?!
python - Tensorflow ValueError:仅使用命名参数调用`sparse_softmax_cross_entropy_with_logits`
调用以下方法时:
我收到以下 ValueError:
反对这一点:
根据nn_ops.py的文档,我需要确保将登录名和标签初始化为以下内容:
def _ensure_xent_args(name, sentinel, labels, logits): # 确保所有参数都作为命名参数传递。如果 sentinel 不是 None: raise ValueError("Only call
%s
with " "named arguments (labels=..., logits=..., ...)" % name) 如果标签是 None 或 logits 是 None: raise ValueError( “必须提供标签和日志。”)Logits=X,标签=Y
这里的原因是什么?我是否将它们初始化为诸如损失之类的值?或者?
tensorflow - 加权交叉熵张量流
我找不到允许您传入不等于 1 的标签的内置 tensorflow,因此尝试编写自己的:(输入为 [batch_size,labels])
然而,它似乎没有工作(损失是不同的)。我做错什么了吗?
tensorflow - 如何使用 tensorflow softmax_cross_entropy_with_logits 缩放和重新规范化输出以解决类不平衡
我想缩放模型输出并将其重新规范化以处理类不平衡问题。例如,如果我有 10 个标签的输出y_logits
以及它们的 softmaxy_pred
和先验p
,那么新的输出应该是:
问题是softmax_cross_entropy_with_logits
tensorflow 中的函数需要 logits y_logits
,而我需要做这个缩放y_pred
。知道如何在不自己实施交叉熵损失的情况下做到这一点吗?
neural-network - 优化期间如何将交叉熵损失转换为标量?
我有一个关于如何定义神经网络的基本初学者问题,我正在 Keras 库的背景下学习。按照 MNIST hello world 程序,我定义了这个网络:
我的理解是,这将创建一个具有两层的神经网络,在本例RESHAPED
中为 784,并且NB_CLASSES
为 10,因此该网络将具有 1 个具有 785 个神经元的输入层和一个具有 10 个神经元的输出层。
然后我添加了这个:
我知道已经阅读了分类交叉熵的公式,但它似乎是按输出节点计算的。我的问题是,在训练期间,如何组合交叉熵的值来创建标量值目标函数?这只是一个平均值吗?
softmax - 缩放 sparse_softmax_cross_entropy_with_logits
我如何缩放损失来自sparse_softmax_cross_entropy_with_logits的梯度。例如,我试图除以 128,如下所示,但我发现错误:
我使用的代码如下:
tensorflow - sigmoid_cross_entropy 是否会产生整个批次的平均损失?
我有一个多标签分类任务,有 6 个标签。任何样本都可能没有标签或某些标签为 1。我在 tensorflow 中使用了损失:
每次有一批(1000)个样本进来,就会计算损失。
但我不确定损失是否是每个预测列的对数损失的平均值。如果不是,我如何将损失修改为上面提到的平均列对数损失?
python - sklearn 中的 log_loss:标签二值化不支持多输出目标数据
以下代码
产生以下错误:
我很好奇为什么。我正在尝试重新阅读日志丢失的定义,但找不到任何会使计算不正确的东西。
tensorflow - How to set parameter weights in tf.losses.sigmoid_cross_entropy?
I'm now trying to use tf.losses.sigmoid_cross_entropy
on an unbalanced dataset. However, I'm a little confused on the parameter weights. Here are the comments in the documentation:
weights: Optional Tensor whose rank is either 0, or the same rank as labels, and must be broadcastable to labels (i.e., all dimensions must be either 1, or the same as the corresponding losses dimension).
I know in tf.losses.softmax_cross_entropy
the parameter weights can be a rank 1 tensor with weight for each sample. Why must the weights in tf.losses.sigmoid_cross_entropy
have the same rank as labels?
Can anybody answer me? Better with an example.