Tensorflow:具有交叉熵的缩放 logits
Tensorflow: scaled logits with cross entropy
在 Tensorflow 中,我有一个 classifier 网络和不平衡训练 classes。由于各种原因,我无法使用重采样来补偿不平衡的数据。因此,我不得不通过其他方式来补偿失衡,特别是根据每个 class 中的示例数量将 logits 乘以权重。我知道这不是首选方法,但重采样不是一种选择。我的训练损失操作是 tf.nn.softmax_cross_entropy_with_logits
(我也可以尝试 tf.nn.sparse_softmax_cross_entropy_with_logits
)。 Tensorflow 文档在这些操作的描述中包含以下内容:
WARNING: This op expects unscaled logits, since it performs a softmax
on logits internally for efficiency. Do not call this op with the
output of softmax, as it will produce incorrect results.
我的问题:上面的警告是仅指由 softmax 完成的缩放,还是意味着 any 任何类型的 logit 缩放禁止?如果是后者,那么我的 class-重新平衡 logit 缩放会导致错误结果吗?
谢谢,
罗恩
警告只是告诉您 tf.nn.softmax_cross_entropy_with_logits
将在计算交叉熵之前对输入 logits 应用 softmax
。这个警告似乎真的避免应用 softmax 两次,因为交叉熵结果会非常不同。
这是相关 source code 中关于实现 tf.nn.softmax_cross_entropy_with_logits
函数的评论:
// NOTE(touts): This duplicates some of the computations in softmax_op
// because we need the intermediate (logits -max(logits)) values to
// avoid a log(exp()) in the computation of the loss.
如警告所述,此实现是为了提高性能,但请注意您不应将自己的 softmax
层作为输入(这在实践中有点方便)。
如果强制 softmax
阻碍了你的计算,也许另一个 API 可以帮助:tf.nn.sigmoid_cross_entropy_with_logits
or maybe tf.nn.weighted_cross_entropy_with_logits
.
尽管如此,实施似乎并未表明 任何 缩放都会影响结果。我想线性缩放函数应该没问题,只要它保留原始的 logits 重新分区。但是无论在输入 logits 上应用什么,tf.nn.softmax_cross_entropy_with_logits
都会在计算交叉熵之前应用 softmax
。
在 Tensorflow 中,我有一个 classifier 网络和不平衡训练 classes。由于各种原因,我无法使用重采样来补偿不平衡的数据。因此,我不得不通过其他方式来补偿失衡,特别是根据每个 class 中的示例数量将 logits 乘以权重。我知道这不是首选方法,但重采样不是一种选择。我的训练损失操作是 tf.nn.softmax_cross_entropy_with_logits
(我也可以尝试 tf.nn.sparse_softmax_cross_entropy_with_logits
)。 Tensorflow 文档在这些操作的描述中包含以下内容:
WARNING: This op expects unscaled logits, since it performs a softmax on logits internally for efficiency. Do not call this op with the output of softmax, as it will produce incorrect results.
我的问题:上面的警告是仅指由 softmax 完成的缩放,还是意味着 any 任何类型的 logit 缩放禁止?如果是后者,那么我的 class-重新平衡 logit 缩放会导致错误结果吗?
谢谢,
罗恩
警告只是告诉您 tf.nn.softmax_cross_entropy_with_logits
将在计算交叉熵之前对输入 logits 应用 softmax
。这个警告似乎真的避免应用 softmax 两次,因为交叉熵结果会非常不同。
这是相关 source code 中关于实现 tf.nn.softmax_cross_entropy_with_logits
函数的评论:
// NOTE(touts): This duplicates some of the computations in softmax_op
// because we need the intermediate (logits -max(logits)) values to
// avoid a log(exp()) in the computation of the loss.
如警告所述,此实现是为了提高性能,但请注意您不应将自己的 softmax
层作为输入(这在实践中有点方便)。
如果强制 softmax
阻碍了你的计算,也许另一个 API 可以帮助:tf.nn.sigmoid_cross_entropy_with_logits
or maybe tf.nn.weighted_cross_entropy_with_logits
.
尽管如此,实施似乎并未表明 任何 缩放都会影响结果。我想线性缩放函数应该没问题,只要它保留原始的 logits 重新分区。但是无论在输入 logits 上应用什么,tf.nn.softmax_cross_entropy_with_logits
都会在计算交叉熵之前应用 softmax
。