文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Pytorch训练模型得到输出后计算F1-Score 和AUC的操作

2024-04-02 19:55

关注

1、计算F1-Score

对于二分类来说,假设batch size 大小为64的话,那么模型一个batch的输出应该是torch.size([64,2]),所以首先做的是得到这个二维矩阵的每一行的最大索引值,然后添加到一个列表中,同时把标签也添加到一个列表中,最后使用sklearn中计算F1的工具包进行计算,代码如下


import numpy as np
import sklearn.metrics import f1_score
prob_all = []
lable_all = []
for i, (data,label) in tqdm(train_data_loader):
    prob = model(data) #表示模型的预测输出
    prob = prob.cpu().numpy() #先把prob转到CPU上,然后再转成numpy,如果本身在CPU上训练的话就不用先转成CPU了
    prob_all.extend(np.argmax(prob,axis=1)) #求每一行的最大值索引
    label_all.extend(label)
print("F1-Score:{:.4f}".format(f1_score(label_all,prob_all)))

2、计算AUC

计算AUC的时候,本次使用的是sklearn中的roc_auc_score () 方法

输入参数:

y_true:真实的标签。形状 (n_samples,) 或 (n_samples, n_classes)。二分类的形状 (n_samples,1),而多标签情况的形状 (n_samples, n_classes)。

y_score:目标分数。形状 (n_samples,) 或 (n_samples, n_classes)。二分类情况形状 (n_samples,1),“分数必须是具有较大标签的类的分数”,通俗点理解:模型打分的第二列。举个例子:模型输入的得分是一个数组 [0.98361117 0.01638886],索引是其类别,这里 “较大标签类的分数”,指的是索引为 1 的分数:0.01638886,也就是正例的预测得分。

average='macro':二分类时,该参数可以忽略。用于多分类,' micro ':将标签指标矩阵的每个元素看作一个标签,计算全局的指标。' macro ':计算每个标签的指标,并找到它们的未加权平均值。这并没有考虑标签的不平衡。' weighted ':计算每个标签的指标,并找到它们的平均值,根据支持度 (每个标签的真实实例的数量) 进行加权。

sample_weight=None:样本权重。形状 (n_samples,),默认 = 无。

max_fpr=None

multi_class='raise':(多分类的问题在下一篇文章中解释)

labels=None

输出:

auc:是一个 float 的值。


import numpy as np
import sklearn.metrics import roc_auc_score
prob_all = []
lable_all = []
for i, (data,label) in tqdm(train_data_loader):
    prob = model(data) #表示模型的预测输出
    prob_all.extend(prob[:,1].cpu().numpy()) #prob[:,1]返回每一行第二列的数,根据该函数的参数可知,y_score表示的较大标签类的分数,因此就是最大索引对应的那个值,而不是最大索引值
    label_all.extend(label)
print("AUC:{:.4f}".format(roc_auc_score(label_all,prob_all)))

补充:pytorch训练模型的一些坑

1. 图像读取

opencv的python和c++读取的图像结果不一致,是因为python和c++采用的opencv版本不一样,从而使用的解码库不同,导致读取的结果不同。

2. 图像变换

PIL和pytorch的图像resize操作,与opencv的resize结果不一样,这样会导致训练采用PIL,预测时采用opencv,结果差别很大,尤其是在检测和分割任务中比较明显。

3. 数值计算

pytorch的torch.exp与c++的exp计算,10e-6的数值时候会有10e-3的误差,对于高精度计算需要特别注意,比如

两个输入5.601597, 5.601601, 经过exp计算后变成270.85862343143174, 270.85970686809225

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯