多标签分类损失函数

Multi-label classification loss function

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

在 Tensorflow 中它看起来像这样:

cost = tf.nn.sigmoid_cross_entropy_with_logits()

这给出了一个数组,其值与我们拥有的输出节点一样多。

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

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

或者每个损失单独处理?

谢谢

对于多标签 classification 中的 N 个标签,是否对每个 class 的损失求和或者是否使用计算平均损失并不重要tf.reduce_mean:梯度会指向同一个方向。

但是,如果将总和除以 N(这实际上就是平均),这将影响一天结束时的学习率。如果你不确定多标签classification任务中会有多少标签,使用tf.reduce_mean可能更容易,因为你不必重新调整这个损失组件的权重与损失的其他组成部分相比,您不必在 N 标签更改数中调整学习率。