【问题标题】:Tensorflow multilabel accuracy measuresTensorFlow 多标签准确度测量
【发布时间】:2020-10-13 17:45:05
【问题描述】:

我正在处理一个有 11 个可能标签的多标签问题。

y_true 和 y_pred 是形状为 [batch_size, 11] 的张量,其中可能的标签表示为 0 和 1,例如:

例如,batch_size=4

  y_true=[[0,1,1,1,0,0,0,1,0,0,1],
           [0,1,1,1,0,0,0,1,1,0,1],
           [0,1,0,1,1,0,0,1,0,0,1],
           [0,0,1,1,0,0,0,1,0,0,0]]

   y_pred= [[0,1,1,1,0,0,0,1,0,0,0],
           [0,1,1,1,0,0,0,1,1,0,1],
           [1,1,0,1,1,0,0,1,0,0,1],
           [1,0,1,1,1,0,0,1,0,0,0]]

我一直在搜索,但我有很多问题,我想要 3 种准确度:

  1. “类准确度”,我的意思是如果正确的标签是 [class1, class2, class3,..., class11]。

     y_true_class1=[0,0,0,0]  
     y_pred_class1=[0,0,1,1]
     acc_class1=2/4
    
  2. 批次中每个元素的准确率平均值,例如:

    y_true_batch_element_1= [0,1,1,1,0,0,0,1,0,0,1]

    y_pred_batch_element_1= [0,1,1,1,0,0,0,1,0,0,0]

    acc_element_1 = 10/11

然后:

mean(acc_element_1, acc_element_2, ..., acc_element_n)
  1. 必须正确预测所有类,在这种情况下,我们会收到:

    acc=1/4 (element2 是唯一一个完全 对)`

如何使用 TensorFlow 获得这些准确度?

【问题讨论】:

    标签: python tensorflow metrics multilabel-classification


    【解决方案1】:

    这就是你所拥有的:

    import tensorflow as tf
    
    y_true = tf.convert_to_tensor([[0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1],
                                   [0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1],
                                   [0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1],
                                   [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0]])
    
    y_pred = tf.convert_to_tensor([[0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0],
                                   [0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1],
                                   [1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1],
                                   [1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0]])
    

    这是您的第一个和第二个指标:

    tf.divide(tf.reduce_sum(
        tf.cast(
            tf.equal(y_true, y_pred), tf.int32), axis=1), 
        tf.shape(y_true)[1])
    
    <tf.Tensor: shape=(4,), dtype=float64, numpy=array([0.90909091, 1., 0.90909091, 0.81818182])>
    

    这是您的第三个指标:

    tf.reduce_mean(tf.cast(tf.reduce_all(tf.equal(y_true, y_pred), axis=1), tf.float32), axis=0)
    
    <tf.Tensor: shape=(), dtype=float32, numpy=0.25>
    

    我希望我做对了。你的两个第一次在我看来是一样的。

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 1970-01-01
      • 2021-08-02
      • 2012-01-03
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多