如何测试模型推理精度:Python初学者指南

如何测试模型推理精度:Python初学者指南

    • 什么是模型推理精度?
    • 使用工具包:lm-evaluation-harness
      • 安装工具包
    • 测试模型推理精度的步骤
      • 1. 加载模型和分词器
      • 2. 使用 lm-evaluation-harness 进行测试
      • 3. 运行脚本
      • 4. 查看结果
    • 总结

在机器学习和深度学习中,模型的推理精度是一个非常重要的指标。它可以帮助我们了解模型在实际应用中的表现,尤其是在处理复杂任务时。本文将带你一步步了解如何测试模型的推理精度,并使用Python编写简单的代码来实现这一目标。

什么是模型推理精度?

模型推理精度是指模型在给定任务上的准确率。例如,在问答任务中,模型回答正确的比例就是它的推理精度。为了测试模型的推理精度,我们可以使用一些标准的数据集和工具。

使用工具包:lm-evaluation-harness

我们将使用 lm-evaluation-harness 这个工具包来测试模型的推理精度。这个工具包提供了许多标准的数据集和评估方法,可以帮助我们轻松地测试模型的性能。

安装工具包

首先,我们需要安装 lm-evaluation-harness 工具包。你可以使用以下命令来安装:

git clone --depth 1 https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .

如果你在国内,可以使用镜像站来加快下载速度:

export HF_ENDPOINT=https://hf-mirror.com

如果在加载数据集时遇到问题,可以尝试指定 datasets 的版本:

pip install datasets==2.14.6

测试模型推理精度的步骤

我们将使用 Qwen2.5-0.5B 模型,并在 ARC_challengeHellaSwagpiqa 数据集上进行测试。

1. 加载模型和分词器

首先,我们需要加载模型和分词器。我们将使用 transformers 库来加载模型和分词器。

from transformers import AutoModelForCausalLM, AutoTokenizer# 加载模型
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B", device_map="auto", trust_remote_code=True).eval()# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B", trust_remote_code=True)

2. 使用 lm-evaluation-harness 进行测试

接下来,我们使用 lm-evaluation-harness 来测试模型的推理精度。我们将使用 simple_evaluate 函数来进行评估。

from lm_eval.models.huggingface import HFLM
from lm_eval import simple_evaluate
import json# 创建HFLM对象
lm = HFLM(pretrained=model, tokenizer=tokenizer, batch_size=64, device="cpu")# 在指定数据集上进行评估
results = simple_evaluate(model=lm, tasks=["arc_challenge", "hellaswag", "piqa"])# 将结果导出到JSON文件
filtered_results = results.copy()
filtered_results = {key: value for key, value in results.items() if key == "results"}
json_filtered_results = json.dumps(filtered_results, indent=4)with open("results.json", "w") as json_file:json_file.write(json_filtered_results)

3. 运行脚本

将上述代码保存为一个Python脚本(例如 evaluate_model.py),然后在命令行中运行:

python evaluate_model.py

运行完成后,你会看到一个名为 results.json 的文件,里面包含了模型在 ARC_challengeHellaSwagpiqa 数据集上的推理精度。

4. 查看结果

打开 results.json 文件,你会看到类似以下的内容:

{"results": {"arc_challenge": {"alias": "arc_challenge","acc,none": 0.295221843003413,"acc_stderr,none": 0.01332975029338232,"acc_norm,none": 0.3242320819112628,"acc_norm_stderr,none": 0.013678810399518813},"hellaswag": {"alias": "hellaswag","acc,none": 0.40619398526190004,"acc_stderr,none": 0.004901178917900843,"acc_norm,none": 0.5214100776737701,"acc_norm_stderr,none": 0.004985204766555058},"piqa": {"alias": "piqa","acc,none": 0.7023939064200218,"acc_stderr,none": 0.01066735379238821,"acc_norm,none": 0.6996735582154516,"acc_norm_stderr,none": 0.010695225308183138}}
}

这里的 acc,none 表示模型在对应数据集上的准确率。例如,arc_challenge 数据集的准确率为 75%。

总结

通过以上步骤,你可以轻松地测试模型的推理精度。使用 lm-evaluation-harness 工具包,我们可以方便地在多个标准数据集上评估模型的性能。希望这篇博客能帮助你入门模型精度测试,并为你未来的项目提供有价值的参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP-IDF学习记录(2)ESP-IDF 扩展的简单使用

傻瓜式记录一个示例的打开,编译,运行。后面我再一个个运行简单分析每个demo的内容。 1.打开示例代码 2.选择项目,文件夹 3.选择串口 4.选择调试方式 5.根据硬件GPIO口配置menuconfig 6.构建项目 7.烧录设备,选择串口UART方式 运行…

SpringMVC学习(一)——请求与响应处理

目录 一、SpringMVC简介 二、RequestMapping:请求路径映射 三、RestController 四、请求限定 五、请求处理 1.使用普通变量,收集请求参数 2.使用RequestParam明确指定获取参数 3.目标方法参数是一个pojo 4.RequestHeader:获取请求…

数据分析的分类和EDIT思维框架

为了服务于企业不同层次的决策,商业数据分析过程需要提供相应的数据科学产出物。 一般而言,数据分析需要经历从需求层、数据层、分析层到输出层四个阶段。 第一个阶段是需求层——确定目标,具体目标需要依据具体的层次进行分析&#xff1a…

实验五 时序逻辑电路部件实验

一、实验目的 熟悉常用的时序逻辑电路功能部件,掌握计数器、了解寄存器的功能。 二、实验所用器件和仪表 1、双 D触发器 74LS74 2片 2、74LS162 1片 3、74194 1片 4、LH-D4实验仪 1台 1.双…

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针-CSDN博客 类型含义使用场景示例nil表示一个指向 Objective - C 对象的空指针。在 Objective - C 和 Swift(与 Objective - C 交互时)中用于表示对象不存在。当一个对象变量没有指向任何有效的对象实例…

JS面试题|[2024-12-28]

1.JS的设计原理是什么? JS引擎 运行上下文 调用栈 事件循环 回调 执行流程: JS引擎将代码解析为电脑可以执行的代码,调用一些API(运行上下文)让浏览器执行 JS是单线程的,每次从调用栈里面取出来的代码进行调…

全面了解 SQL Server:功能、优势与最佳实践

SQL Server 是微软公司推出的一款关系型数据库管理系统(RDBMS),广泛应用于企业级数据存储、数据分析、应用开发等领域。作为全球最受欢迎的数据库管理系统之一,SQL Server 提供了强大的功能和工具,支持从小型应用到大型…

jdk动态代理和cglib动态代理对比

jdk动态代理和cglib动态代理对比: CGLIB 和 JDK 动态代理都可以用来在运行时生成代理对象 1. 基本概念 JDK 动态代理:只代理接口(interface),无法代理类。它使用 java.lang.reflect.Proxy 类和 java.lang.reflect.I…

攻破 Kioptix Level 1 靶机

找教程然后自己练习,论菜狗的自我修养 基本步骤 1.确定目标IP 2.扫描端口,服务,版本信息,漏洞信息 3.查找漏洞可利用脚本 4.运行脚步 一、信息获取 arp-scan -l nmap -sS -p- -sV -sC -A --min-rate5000 192.168.5.130 二、查…

b站ip属地评论和主页不一样怎么回事

在浏览B站时,细心的用户可能会发现一个有趣的现象:某些用户的评论IP属地与主页显示的IP属地并不一致。这种差异引发了用户的好奇和猜测,究竟是什么原因导致了这种情况的发生呢?本文将对此进行深入解析,帮助大家揭开这一…

音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件

通过FFmpeg命令可以将mp4文件转换为ps文件。由于ps文件对应的FFInputFormat结构为: const FFInputFormat ff_mpegps_demuxer {.p.name "mpeg",.p.long_name NULL_IF_CONFIG_SMALL("MPEG-PS (MPEG-2 Program Stream)"),.p.flags …

【数据结构与算法】单向链表

一、什么是链表 链表由一系列节点组成,每个节点都包含一个 data 域(存放数据)和一个 next 域(指向下一节点)。链表中的节点可以按照任意顺序存放在内存中,它们之间并不连续。每个节点都记录了下一个节点的地…

【计组】例题课后题

第一章 计算机如何区分指令和数据? 一般来讲,在取指周期中从内存读出的信息是指令流,它流向控制器;而执行周期中从内存读出的信息流是数据流,它由内存流向运算器。 从存放位置看,从代码段取出的是指令流,从数据…

一网多平面

“一网多平面”是一种网络架构概念,具体指的是在一张物理网络之上,逻辑划分出“1N”个平面。以下是对“一网多平面”的详细解释: 定义与构成 01一网多平面 指的是在统一的物理网络基础设施上,通过逻辑划分形成多个独立的网络平面…

跨语言数据格式标准化在 HarmonyOS 开发中的实践

文章目录 前言数据格式标准化的意义数据传递中的痛点标准化的优势 JSON 与 Protocol Buffers 的比较JSONProtocol Buffers HarmonyOS 跨语言数据传递示例示例代码:定义 Protocol Buffers 消息格式生成 Java 和 C 代码示例代码:Java 端序列化与传递数据C …

【Python】基于界面库PyQt5+Qt Dsigner的环境配置和界面绘制

目录 一 安装PyQt5以及PyQt5-tools 二 配置外部开发工具 三 使用Qt Designer设计界面 四 使用PyUIC将ui文件转换为py文件 五 CU分离实现逻辑代码 一 安装PyQt5以及PyQt5-tools 之前做的一些Python脚本、软件都是基于 Tkinter 实现的,其中界面的设计布局是很头疼…

Java读取InfluxDB数据库的方法

本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、tag等。 首先,创建一个Java项目,用于撰写代码。如果大家是基于IDEA来创建项目,则可…

嵌入式驱动开发详解7(并发、竞争、中断)

文章目录 前言并发和竞争原子操作自旋锁信号量互斥体 中断中断简介中断API上半部和下半部设备树分析中断号获取源码 后续参考文献 前言 中断会引起线程的切换,并发和竞争也是对线程切换的一种灵活保护和处理,因此这里将中断和并发与竞争放在一块讲解说明…

11.MySQL视图特性

目录 视图基本使用视图规则和限制 视图 视图是一个虚拟表, 其内容有查询定义. 同真实的表一样, 视图包含一系列带有名称的列和行数据. 视图的数据变化会影响到基表, 基表的数据变化也会影响到视图, 这个视图和刚刚讲的ReadView之间没有任何关系. 基本使用 创建视图: create vi…

【RabbitMQ高级篇】消息可靠性问题(1)

目录 1.消息可靠性 1.1.生产者消息确认 1.1.1.修改配置 1.1.2.定义Return回调 1.1.3.定义ConfirmCallback 1.2.消息持久化 1.2.1.交换机持久化 1.2.2.队列持久化 1.2.3.消息持久化 1.3.消费者消息确认 1.3.1.演示none模式 1.3.2.演示auto模式 1.4.消费失败重试机制…