首页 文章

在TensorFlow中使用稀疏标签进行多标签图像分类?

提问于
浏览
4

我想为n个类执行多标签图像分类任务 . 我为每个图像都有稀疏的标签向量,每个标签向量的每个维度目前都以这种方式编码:

1.0 - > Label 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形交叉熵是否存在? (无法找到某些内容)或任何建议如何处理稀疏标签的多标签分类问题 .

3 回答

  • 0

    首先,我想知道丢失数据的含义是什么意思?你的案件中miss和false有什么区别?

    接下来,我认为您代表这样的数据是错误的 . 您有尝试在同一维度上表示的不相关信息 . (如果它是假的或者是真的那么它会起作用)

    在我看来,更好的是为你的每个 class 代表一个概率,如果它是好的,或缺失或是假的 .

    在你的情况下V = [(1,0,0),(0,0,1),(1,0,0),(0,1,0)]

  • 0

    好!所以你的问题更多的是关于如何处理我认为的缺失数据 .

    所以我认为你绝对应该使用 tf.sigmoid_cross_entropy_with_logits()

    只需将缺失数据的目标更改为0.5 . (0表示假,1表示真) . 我从来没有尝试过这种方法,但它应该让你的网络学习而不会过分偏向它 .

  • 0

    我使用 weighted_cross_entropy_with_logits 作为损失函数,正值权重为1秒 .

    就我而言,所有标签都同样重要 . 但是0比任何标签的 Value 高出1倍的可能性要高出10倍 .

    所以我通过调用上述损失函数的 pos_weight 参数来权衡所有1 . 我使用了pos_weight(=正值的权重)10 . 顺便说一句,我不建议任何策略来计算pos_weight . 我认为这将明确取决于手头的数据 .

    if real label = 1, weighted_cross_entropy = pos_weight * sigmoid_cross_entropy

    带有logits的加权交叉熵与具有logits的Sigmoid交叉熵相同,除了额外的权重值乘以所有 targets with a positive real value ,即; 1 .

    理论上,它应该做的工作 . 我仍在调整其他参数以优化性能 . 稍后将更新性能统计信息 .

相关问题