paddle03-paddle.metric


🌟 paddle.metric

評估器相關API

  • 1.paddle.Metric() 評估器基類

  • 2.paddle.metric.Accuracy() 准確率評估器類

    參數: 
        topk: int/tuple[int], 計算准確率的 top個數,默認1
    
    • 獨立使用實例:
      import numpy as np
      import paddle
      
      x = paddle.to_tensor(np.array([
          [0.1, 0.2, 0.3, 0.4],
          [0.1, 0.4, 0.3, 0.2],
          [0.1, 0.2, 0.4, 0.3],
          [0.1, 0.2, 0.3, 0.4]]))
      y = paddle.to_tensor(np.array([[0], [1], [2], [3]]))
      
      m = paddle.metric.Accuracy()
      correct = m.compute(x, y)       # [[0],[1],[1],[1]]
      m.update(correct)
      res = m.accumulate()
      print(res) # 0.75
      
    • 在Model API中的示例:
      from paddle.static import InputSpec
      import paddle.vision.transforms as T
      from paddle.vision.datasets import MNIST
      
      input = InputSpec([None, 1, 28, 28], 'float32', 'image')
      label = InputSpec([None, 1], 'int64', 'label')
      transform = T.Compose([T.Transpose(), T.Normalize([127.5], [127.5])])
      train_dataset = MNIST(mode='train', transform=transform)
      
      model = paddle.Model(paddle.vision.LeNet(), input, label)
      optim = paddle.optimizer.Adam(
          learning_rate=0.001, parameters=model.parameters())
      model.prepare(
          optim,
          loss=paddle.nn.CrossEntropyLoss(),
          metrics=paddle.metric.Accuracy())           # *********
      
      model.fit(train_dataset, batch_size=64)         # *********
      
    • 方法: compute(pred, label, *args) 計算top-k(topk中的最大值)的索引
      參數: 
          1.pred (Tensor) - 預測結果為是float64或float32類型的Tensor。shape為[batch_size, d0, ..., dN]
          2.label (Tensor) - 真實的標簽值是一個int64類型的Tensor,shape為[batch_size, d0, ..., 1] 或one hot表示的形狀[batch_size, d0, ..., num_classes].  
      返回:一個Tensor,shape是[batch_size, d0, ..., topk], 值為0或1,1表示預測正確  
      
    • 方法:update(pred, label, *args) 更新metric的狀態(正確預測的個數和總個數),以便計算累積的准確率。返回:當前step的准確率。
      參數: compute() 結果, correct:tensor, np,一個值為0或1的Tensor,shape是[batch_size, d0, ..., topk]  
      返回: 當前 step 的准確率。 
      
    • 方法: reset() 清空狀態和計算結果,返回: 無
    • 方法: accumulate() 累積的統計指標,計算和返回准確率。
      返回: 准確率,一般是個標量 或 多個標量,和topk的個數一致
      
    • 方法: name() 返回:評估的名字,string類型
  • 3.paddle.metric.Auc() auc 評估器類

    * 計算Auc,在二分類(binary classification)中廣泛使用
    * 該接口創建四個局部變量true_positives, true_negatives, false_positives和false_negatives,用於計算Auc。為了離散化AUC曲線,使用臨界值的線性間隔來計算召回率和准確率的值。用false positive的召回值高度計算ROC曲線面積,用recall的准確值高度計算PR曲線面積。  
    
    參數: 
        1.curve (str) - 將要計算的曲線名的模式,包括'ROC'(默認)或者'PR'(Precision-Recall-curve)
        2.num_thresholds (int) - 離散化AUC曲線的整數閾值數,默認是4095。
    
    • 獨立使用示例:
      import numpy as np
      import paddle
      
      m = paddle.metric.Auc()
      
      n = 8
      class0_preds = np.random.random(size = (n, 1))
      class1_preds = 1 - class0_preds
      preds = np.concatenate((class0_preds, class1_preds), axis=1)
      labels = np.random.randint(2, size = (n, 1))
      
      m.update(preds=preds, labels=labels)
      res = m.accumulate()
      
    • 在Model API中的示例
      model.prepare(optim, loss=loss, metrics=paddle.metric.Auc())
      model.fit(data, batch_size=16)   
      
    • 方法: update(pred, label, *args) 更新AUC計算的狀態
    • 方法: reset() 清空狀態和計算結果
    • 方法: accumulate() 累積的統計指標,計算和返回AUC值。 返回:AUC值,一個標量。
  • 4.paddle.metric.Precision() 精確率評估器類 僅針對二分類 預測正確數量/預測數量

  • 5.paddle.metric.Recall() 召回率評估器類 僅針對二分類 預測正確數量/正確數量
    #機器學習 Micro-F1和Macro-F1詳解

評估器函數相關API

  • paddle.metric.accuracy(input, label, k=1, correct=None, total=None) 准確率評估函數
    使用輸入和標簽計算准確率。 如果正確的標簽在topk個預測值里,則計算結果加1。注意:輸出正確率的類型由input類型決定,input和lable的類型可以不一樣
    
    參數: 
        1.input (Tensor)-數據類型為float32,float64。輸入為網絡的預測值。shape為 [sample_number, class_dim]
        2.label (Tensor)-數據類型為int64,int32。輸入為數據集的標簽。shape為 [sample_number, 1]
        3.k (int64|int32,可選) - 取每個類別中k個預測值用於計算,默認值為1
        4.correct (int64|int32, 可選)-正確預測值的個數,默認值為None
        5.total (int64|int32,可選)-總共的預測值,默認值為None。
    
    predictions = paddle.to_tensor([[0.2, 0.1, 0.4, 0.1, 0.1], [0.2, 0.3, 0.1, 0.15, 0.25]],        dtype='float32')
    label = paddle.to_tensor([[2], [0]], dtype="int64")
    result = paddle.metric.accuracy(input=predictions, label=label, k=1)
    # [0.5]
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM