加载预训练模型计算测试数据集的LogLoss、AUC和EER,需要根据具体场景选择相应的计算方法。以下是三种常见的方法:
1. 计算LogLoss:
```python
import torch
from torch.utils.data import DataLoader
import torch.nn.functional as F
# 加载模型和测试数据集
model = torch.load('pretrained_model.pth')
test_data = YourTestData(...)
test_loader = DataLoader(test_data, batch_size=64)
# 计算测试数据集的LogLoss
model.eval()
test_loss = 0
with torch.no_grad():
for data, target in test_loader:
output = model(data)
test_loss += F.nll_loss(output, target).item() # 累加每个批次的loss
test_loss /= len(test_loader) # loss取平均值
print('Test set: Average Loss: {:.4f}'.format(test_loss))
上記のコードでは、PyTorch が提供する関数を使用して、F.nll_loss()
テスト データ セットの LogLoss を計算します。計算する場合、各バッチの損失を累積し、最後にその合計をテスト セット内のサンプル数で割って平均損失を取得する必要があります。
- AUC を計算します。
import torch
from torch.utils.data import DataLoader
from sklearn.metrics import roc_auc_score
# 加载模型和测试数据集
model = torch.load('pretrained_model.pth')
test_data = YourTestData(...)
test_loader = DataLoader(test_data, batch_size=64)
# 计算测试数据集的预测概率和真实标签
model.eval()
y_true, y_score = [], []
with torch.no_grad():
for data, target in test_loader:
output = torch.sigmoid(model(data)) # 使用sigmoid转换到0~1之间的概率
y_true.extend(target.tolist()) # 将真实标签添加到列表中
y_score.extend(output.tolist()) # 将预测概率添加到列表中
# 计算AUC
auc = roc_auc_score(y_true, y_score)
print('Test set: AUC = {:.4f}'.format(auc))
上記のコードでは、sklearn.metrics によって提供される関数を使用して、roc_auc_score()
テスト データ セットの AUC を計算します。計算するときは、各サンプルの予測確率と真のラベルを取得する必要があります。torch.sigmoid()
出力を 0 から 1 の間に変換する確率を使用して、それらを 2 つのリストに追加します。最後にroc_auc_score()
関数を使用して AUC を計算します。
- EER を計算します。
import torch
import numpy as np
from scipy.optimize import brentq
from sklearn.metrics import roc_curve
def calculate_eer(y_true, y_score):
fpr, tpr, thresholds = roc_curve(y_true, y_score, pos_label=1)
eer = brentq(lambda x: 1. - x - np.interp(x, fpr, tpr), 0., 1.)
return eer * 100
# 加载模型和测试数据集
model = torch.load('pretrained_model.pth')
test_data = YourTestData(...)
test_loader = DataLoader(test_data, batch_size=64)
# 计算测试数据集的预测概率和真实标签
model.eval()
y_true, y_score = [], []
with torch.no_grad():
for data, target in test_loader:
output = torch.sigmoid(model(data)) # 使用sigmoid转换到0~1之间的概率
y_true.extend(target.tolist()) # 将真实标签添加到列表中
y_score.extend(output.tolist()) # 将预测概率添加到列表中
# 计算EER
eer = calculate_eer(y_true, y_score)
print('Test set: EER = {:.2f}%'.format(eer))
calculate_eer()
上記のコードでは、テスト データ セットの EER を計算するように関数がカスタマイズされています。まず、sklearn.metrics が提供する関数を使用してroc_curve()
FPR と TPR を計算し、しきい値を取得します。次に、scipy.optimize が提供する関数を使用してbrentq()
ERR に対応するしきい値を解決し、最後に解決結果に 100 を乗じて EER のパーセント形式を取得します。
「」