🌟 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]