我在很多地方看到,对于使用神经网络的多标签分类,一个有用的损失函数是每个输出节点的二元交叉熵。
在 Tensorflow 中它看起来像这样:
cost = tf.nn.sigmoid_cross_entropy_with_logits()
这给出了一个数组,其值与我们拥有的输出节点一样多。
我的问题是,这个成本函数是否应该根据输出节点的数量进行平均?在 Tensorflow 中看起来像:
cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits())
或者每个损失都是独立处理的?
谢谢
最佳答案
对于 N
多标签分类中的标签,无论您是对每个类别的损失求和,还是使用 tf.reduce_mean
计算平均损失都无关紧要:渐变会指向同一方向。
但是,如果您将总和除以 N
(这就是平均的本质),这将影响一天结束时的学习率。如果不确定多标签分类任务中会有多少个标签,使用tf.reduce_mean
可能更容易。 ,因为与损失的其他部分相比,您不必重新调整此损失部分的权重,也不必调整数字 N
中的学习率标签更改。
关于python - 多标签分类损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395170/