python - 多标签分类损失函数
问题描述
我在很多地方看到,对于使用神经网络的多标签分类,一个有用的损失函数是每个输出节点的二进制交叉熵。
在 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
标签更改数量中调整学习率。
推荐阅读
- tfs - Build Android apps on TFS 2017 using Android Studio OpenJDK?
- javascript - 方法上的映射类型
- python - 如何将具有多个字典的列表转换为字典
- c++ - C++ CMake没有正确引用.h的函数
- c++ - 当我在 C++ 中增加私有静态变量时程序抛出错误
- r - 在传单 R 中按颜色对圆形标记进行分类并添加图例
- php - 雄辩的查询 AND OR
- swift - 尝试在表格视图中快速查找特定单元格时失败
- hadoop - 双引号和逗号的 AWS Glue 问题
- node.js - 如何在单个 AWS EC2 实例上的 Node 中部署多个微服务?