多标签分类损失函数

4

我在很多地方看到,对于使用神经网络进行多标签分类,一种有用的损失函数是为每个输出节点使用二元交叉熵。

在Tensorflow中,它看起来像这样:

cost = tf.nn.sigmoid_cross_entropy_with_logits()

这会生成与我们拥有的输出节点数量一样多的值数组。

我的问题是,这个成本函数是否应该平均输出节点的数量?在Tensorflow中看起来像这样:

cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits())

每个损失是独立处理的吗?

谢谢。

1个回答

4
对于多标签分类中的N个标签,无论您是将每个类别的损失相加还是使用tf.reduce_mean计算平均损失,梯度方向都是相同的。但是,如果您将总和除以N(这就是平均值的本质),则最终会影响学习速率。如果您不确定多标签分类任务中有多少标签,使用tf.reduce_mean可能更容易,因为与损失的其他组件相比,您不必重新调整此损失组件的权重,并且在标签数N更改时也不必调整学习率。

好的,非常感谢。我知道类的数量,但是我仍然会使用tf.reduce_mean。 顺便问一下,您知道在多标签分类中用于衡量准确性的度量标准是哪个吗? - sdiabr
@sdiabr 或许这里可以帮到你? - Andrey Tyukin
1
如果我没记错的话,应该有一个单元将Sigmoid和二进制交叉熵结合成一个函数,可以以更稳健的方式进行数值评估。在tf中它的名字是什么(它们都被称为something_very_long_blah_blah_blah_with_logits,没有查找就无法记住哪个做了什么)。@GrantWilliams - Andrey Tyukin
@AndreyTyukin https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits ? @AndreyTyukin,请问您是否需要关于tf.nn.sigmoid_cross_entropy_with_logits的相关信息? - Grant Williams
@AndreyTyukin,谢谢你的帮助。感谢GrantWilliams的评论。是的,你所说的函数就是我在问题中提到的那个tf.nn.sigmoid... - sdiabr
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接