我想为n个类执行多标记图像分类任务。 我为每个图像都有稀疏的标签向量,每个标签向量的每个维度目前都以这种方式编码:
1.0 - >标签为true / Image属于此类
-1.0 - >标签false / Image不包含此类。
0.0 - >缺失值/标签
例如:V = {1.0,-1.0,1.0,0.0}
对于这个例子,V模型应该知道相应的图像应该分为第一和第三类。
我目前的问题是如何处理缺失的值/标签。我搜索了这些问题,发现了这个问题: tensorflow / skflow#113 found here
因此可以进行多重图像分类: tf.nn.sigmoid_cross_entropy_with_logits(logits,targets,name = None)
但TensorFlow具有稀疏softmax的此错误函数,用于排他性分类: tf.nn.sparse_softmax_cross_entropy_with_logits(logits,labels,name = None)
那么是否存在稀疏的S形交叉熵? (无法找到某些内容)或任何建议如何处理稀疏标签的多标签分类问题。
答案 0 :(得分:1)
我使用 weighted_cross_entropy_with_logits 作为丢失函数,正数为1。
就我而言,所有标签都同样重要。但是0比任何标签的价值出现的可能性高出1倍。
所以我通过调用上述损失函数的 pos_weight 参数来权衡所有1。我使用了pos_weight(=正值的权重)10。顺便说一句,我不建议任何策略来计算pos_weight。我认为这将明确取决于手头的数据。
如果真实标签= 1, weighted_cross_entropy = pos_weight * sigmoid_cross_entropy
带有logits 的加权交叉熵与具有logits 的 Sigmoid交叉熵相同,除了额外的权重值乘以所有 目标积极的实际价值 即; 1.
理论上,它应该做的工作。我仍在调整其他参数以优化性能。稍后会更新性能统计信息。
答案 1 :(得分:0)
首先,我想知道丢失数据的含义是什么意思?在你的情况下,miss和false之间有什么区别?
接下来,我认为您代表这样的数据是错误的。您有尝试在同一维度上表示的不相关信息。 (如果它是假的或者是真的那么它会起作用)
在我看来,更好的是为每个班级代表一个概率,如果它是好的,或缺失或是假的。
在你的情况下V = [(1,0,0),(0,0,1),(1,0,0),(0,1,0)]
答案 2 :(得分:0)
确定! 所以你的问题更多的是如何处理我认为的缺失数据。
所以我认为你绝对应该使用tf.sigmoid_cross_entropy_with_logits()
只需将缺失数据的目标更改为0.5。 (0表示假,1表示真)。 我从来没有尝试过这种方法,但它应该让你的网络学习而不会过度偏见。