首页 文章

如何使用tensorflow执行多标签分类? [关闭]

提问于
浏览
2

我是tensorflow的新手,想知道是否有任何有多个网络输出的多标签分类的教程或示例 .

我问这个是因为我有一组图像,其中每个图像可以属于几个类,我的输出需要得到每个类的分数 .

我也不知道张量流是否遵循图像和类的某些文件模式,所以如果有人有一些例子它会促进很多 .

谢谢 .

3 回答

  • 3

    您还可以尝试使用Label Powerset方法将问题从多标签转换为多类别 . Label Powerset转换将训练集中证明的每个标签组合视为一个不同的类,并构造一个多类分类器的实例 - 并在预测后将指定的类转换回多标签的情况 . 它在scikit-multilearn和scikit-compatibility包装器中通过tensorflow Estimator或通过input_fn或使用skflow提供 . 然后将其插入LabelPowerset的实例中 .

    代码可以如下:

    from skmultilearn.problem_transform import LabelPowerset
    import tensorflow.contrib.learn as skflow
    
    # assume data is loaded using
    # and is available in X_train/X_test, y_train/y_test
    
    # initialize LabelPowerset multi-label classifier
    # with tensor flow DNN base classifier
    classifier = LabelPowerset(skflow.TensorFlowDNNClassifier(OPTIONS))
    
    # train
    classifier.fit(X_train, y_train)
    
    # predict
    predictions = classifier.predict(X_test)
    
  • 2

    最天真(和合理)的方法是训练分类网络,并移除softmax层并用sigmoids向量替换它 . 这样,您可以将多个单元激活为1 .

    您可以查看分类网络的on TF-slim示例 . 在路径 datasets 下,您将找到有关如何为图像和类准备 TFExample "file pattern"的示例

  • 0

    大多数解决方案都是指sigmoid损失,而sigmoid在我的情况下通过张量流中的 tf.nn.sigmoid_cross_entropy_with_logits(labels,logits) 很好地解决了多标签分类问题 .

    然而,当我处理类不 balancer 问题时,负面情况远远超过正面情况,我发现我编辑的softsign损失比sigmoid好得多 . 调整系数 gamma 被添加到标签以将负类的梯度降低3/4 .

    def unbalance_softsign_loss(labels, logits):
        gamma = 1.25 *labels - 0.25 
        res = 1 - tf.log1p( gamma*logits/(1+ tf.abs(logits)) )
    
        return res
    

    标签是多热编码向量,如[0,1,0,1,0],logits~(-inf,inf)

相关问题