使用本地数据对transformers模型进行微调训练

模型

transformers模型是使用比较多的模型,奈何各个都是体积大,找了一个使用人多不是很大的模型进行训练。
需要魔法
bert-base-uncased模型仓库地址
huggingface下的所有仓库都是git的,也就意味着你可以使用 git clone 可以下载仓库内所有的东西

硬件

本机并没有显卡,公司电脑是 i5 - 10500, 内存32GB

需要下载的库

conda有的库没有,需要下载
json os wandb datasets transformers

注意事项

1,库下载到本地后,在python中引用需要加载父级地址
os.environ["HF_MODELS_HOME"] = "E:\\data\\ai_model\\"

2,需要使用 wandb 进行训练记录,如果不写的话会报错。
wandb地址 wandb官网
3,需要设置对本地单个dll库的设置
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"

最后,附上代码

import json
import os
import wandb
from datasets import Dataset
from transformers import BertTokenizer, BertForQuestionAnswering, Trainer, TrainingArgumentsos.environ["HF_MODELS_HOME"] = "E:\\data\\ai_model\\"
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"aip_key = '98b420c1ea905e27b7885b3d4205832fbef6874f'
# 1.连接 可以写在命令行,也可以写在代码中,只要在代码运行之前运行过即可,这里是代码中的实现
wandb.login(key=aip_key)
# 2.初始化wandb对象,主要用到6的几个参数
runs = wandb.init(project="wandb_study",# name=f"experiment",notes="这是一次test",tags=["test", "Test"]
)
# 3.初始化config
# Capture a dictionary of hyperparameters
wandb.config = {"epochs": 100, "learning_rate": 0.001, "batch_size": 128}# 4.找到相应数据并添加,一般的字符串、整形、浮点型直接用字典的形式就可以,图片前面要加wandb.Image()解析成wandb的形式,表格,summary见8和9
# wandb.log({"accuracy": step_acc,
#            "loss": train_loss.item(),
#            'images': wandb.Image(images[0]),
#            })# 数据准备
def read_json():json_data = '''[{"question": "What is the Apollo program?","context": "The Apollo program was the third human spaceflight program carried out by NASA...","answer": "The Apollo program was the third human spaceflight program carried out by NASA"}]'''data = json.loads(json_data)# 将数据转换为Dataset对象# 转换数据格式dataset_dict = {"question": [item["question"] for item in data],"context": [item["context"] for item in data],"answer": [item["answer"] for item in data]}# 创建Dataset对象dataset = Dataset.from_dict(dataset_dict)print(dataset)return dataset# 定义数据预处理函数,将输入数据转换为模型可用的格式
def preprocess_function(examples):inputs = tokenizer(examples["question"],examples["context"],max_length=512,truncation=True,return_tensors="pt",padding="max_length")start_positions = []end_positions = []for i, answer in enumerate(examples["answer"]):start_pos = examples["context"][i].find(answer)end_pos = start_pos + len(answer)start_positions.append(start_pos)end_positions.append(end_pos)inputs.update({"start_positions": start_positions,"end_positions": end_positions})return inputs# 设置训练参数并初始化Trainer对象
def trainer_training(model):processed_dataset = dataset.map(preprocess_function, batched=True)training_args = TrainingArguments(output_dir='./results',run_name='my_experiment',  # 设置一个不同于 output_dir 的 run_namenum_train_epochs=3,per_device_train_batch_size=8,per_device_eval_batch_size=8,warmup_steps=500,weight_decay=0.01,logging_dir='./logs',logging_steps=10,eval_strategy="steps",  # 使用 eval_strategy 替代 evaluation_strategy)return Trainer(model=model,args=training_args,train_dataset=processed_dataset,eval_dataset=processed_dataset,)if __name__ == '__main__':dataset = read_json()model_name = "bert-base-uncased"tokenizer = BertTokenizer.from_pretrained(model_name)model = BertForQuestionAnswering.from_pretrained(model_name)trainer = trainer_training(model)# 开始训练模型trainer.train()# 保存训练后的模型output_model_dir = "./trained_model"  # 这是一个文件夹,下面有三个文件 config.json model.safetensors training_args.binos.makedirs(output_model_dir, exist_ok=True)trainer.save_model(output_model_dir)

引用资料:
wandb的基本使用

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

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

相关文章

跟着AI学AI_07张量、数组、矩阵

说明这三个概念不是一个范畴的东西,但是很容易混淆,因此放到一起进行说明。 张量(Tensor) 张量是一个多维数组的通用概念,用于表示具有任意维度的数值数据。在数学和计算机科学中,张量是广泛用于表示数据的…

震坤行坤合供应链荣获“2024 LOG低碳供应链物流-最具影响力品牌商”

震坤行坤合供应链荣获“2024 LOG低碳供应链物流-最具影响力品牌商” 近日,罗戈网在青岛举办了2024第三届低碳供应链&物流创新发展高峰论坛,此次峰会聚焦“物流碳中和,可持续供应链”这一核心议题,汇聚国内外双碳践行企业、低碳…

【嵌入式系统实践】实验四综合实验部分代码

由于综合实验未给出一个固定的思路或者目标,这里仅写出部分内容,以便于期末复习背诵手写代码用。 自己写的func.h和func.c涵盖了期末所考手写代码部分,背诵过来就挂不了科。 // functions.h #ifndef FUNCTIONS_H #define FUNCTIONS_Hextern …

D 25章 进程的终止

D 25章 进程的终止 440 25.1 进程的终止:_exit()和exit() 440 1. _exit(int status), status 定义了终止状态,父进程可调用 wait 获取。仅低8位可用, 调用 _exit() 总是成功的。 2.程序一般不会调用 _exit(), 而是…

C++:调整数组顺序使奇数位于偶数前面【面试】

在C&#xff0c;如果要调整数组顺序使所有奇数位于偶数前面&#xff0c;这里提供一种简单且常用的方法&#xff1a;双指针技术。这种方法不需要额外的空间&#xff0c;并且时间复杂度为O(n)。 以下是使用双指针技术实现的示例代码&#xff1a; #include <iostream> #in…

Release和Debug的区别?Release有什么好处?【面试】

Release和Debug的区别&#xff1a; 优化&#xff1a;Debug版本通常不进行优化&#xff0c;以便更容易调试&#xff1b;Release版本则经过高度优化&#xff0c;以提高性能。调试信息&#xff1a;Debug版本包含详尽的调试信息&#xff0c;如符号信息和源代码映射&#xff1b;Rel…

对iOS开发中的链接器ld64和-ld_classic的深入理解

哈喽&#xff0c;大家好&#xff0c;随着iOS应用程序的开发日益增多&#xff0c;开发者们经常会在Xcode中遇到一些特定的编译器和链接器选项。其中&#xff0c;ld64和-ld_classic是两个常见的概念。这一期将深入介绍这两个概念&#xff0c;以帮助iOS开发者更好地理解它们的作用…

什么是全局对象和全局变量

在JavaScript中&#xff0c;全局对象和全局变量是两个重要的概念&#xff0c;它们与代码的执行环境和作用域紧密相关。 全局对象 全局对象&#xff08;Global Object&#xff09;是在代码的任何地方都能访问到的对象。在浏览器环境中&#xff0c;全局对象通常是window对象&am…

公司面试题总结(五)

25.谈一谈箭头函数与普通函数的区别&#xff0c;箭头函数主要解决什么问题&#xff1f; 箭头函数与普通函数的区别&#xff1a; ⚫ 语法简洁性&#xff1a; ◼ 箭头函数使用>符号定义&#xff0c;省略了 function 关键字&#xff0c;使得语法更为紧凑。 ◼ 对于单行函…

【Linux系统编程】进程间通信

进程间通信 1.概念 进程间通信&#xff08;IPC&#xff0c;InterProcess Communication)是指在不同进程之间传播或交换信息。 优点&#xff1a; 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&…

机器学习笔记 - 用于3D数据分类、分割的Point Net简述

一、简述 在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transformer方法,几乎任何 2D 图像应用都会有某种现有的方法。然而,当涉及到 3D 数据时,现成的工具和方法并不那么丰富。3D 空间中一个工具就是Point …

《转载》前苏联的三进制计算机Setun

1、苏联的三进制计算机概述 早在 1956 年&#xff0c;就需要创建一种可在大学和实验室中使用的实用数字计算机模型。为此&#xff0c;需要一种易于学习、可靠、廉价但同时高效、专为大规模使用而设计的小型计算机。 对这种机器的要求&#xff1a;运行速度必须等于每秒数百次操作…

ARM_CCI500_execution_tb

目的&#xff1a;工作记录一下对CCI500 local验证case的波形理解&#xff0c;梳理一下ACE接口的逻辑流程。 CCI简单描述功能&#xff1a;基于目录的做缓存一致性功能的模块&#xff0c;支持4个ACE、6个ACE_LITE(ACE和ACE_LITE加起来不超过7个)、4个memory port、2个system por…

力扣hot100: 48. 旋转图像

LeetCode&#xff1a;48. 旋转图像 受到力扣hot100&#xff1a;54. 螺旋矩阵的启发&#xff0c;我们可以对旋转图像按层旋转&#xff0c;我们只需要记录四个顶点&#xff0c;并且本题是一个方阵&#xff0c;四个顶点就能完成图像的旋转操作。 1、逐层旋转 注意到&#xff0…

Stable Diffusion 如何写出更优雅的 Prompt

在看了前面的课程后&#xff0c; 相信很多人都会有一个困惑&#xff0c;这个 prompt 咋写… 为什么我写的时候只能憋出来了一个 a girl, a boy, beautify … 再也想不到其他的了&#xff0c; 总感觉是吃了没文化的亏&#xff1f; 这一节课我们就来讲一讲 如何写好 prompt …

Personalized Subgraph Federated Learning,FED-PUB,2023,ICML 2023,代码

论文阅读在这篇文章 data文件夹 图划分算法&#xff0c;没有采用Louvain算法&#xff08;Blondel et al.&#xff0c; 2008&#xff09;&#xff0c;在Zhang et al. (2021),使用到。而是使用的METIS graph partitioning algorithm(Karypis,1997) disjoint.py parser.py pa…

个股场外期权个人如何参与买卖?

个股场外期权作为一种金融衍生品&#xff0c;为个人投资者提供了多样化的投资选择和风险管理工具。想要参与个股场外期权的买卖&#xff0c;以下是一些关键步骤和考虑因素。 文章来源/&#xff1a;财智盈动 第一步&#xff1a;选择合适的金融机构 首先&#xff0c;个人投资者需…

vue/react/js 常用的原生获取当前页面的url网址的相关方法

目录 第一章 场景 第二章 总结 第一章 场景 最近实现需求时遇到这么一种情况&#xff1a; 本地url —— 线上url —— 需求&#xff1a;需要将token清除掉 注意事项&#xff1a;token不是#/后面的参数&#xff0c;说明并不是我们前端返回的&#xff0c;vue路由的方法使用不…

悦库企业网盘 /user/login/.html SQL注入漏洞复现

0x01 产品简介 悦库企业网盘是一款专为满足企业文件管理、协同办公、文件共享需求而设计的私有部署安全、简单的企业文件管理系统。该产品全面覆盖企业文件管理场景,提供一系列功能强大且操作简便的解决方案,助力企业提升效率、降低管理成本。悦库企业网盘提供精细的权限管理…

小程序无法调用服务端问题排查

1、问题描述 突然有一天线上的小程序不能登录&#xff0c;经查小程序无法调用。经查无法小程序页面无法调用后台服务。 2、排查过程 由于无法登录小程序发布服务器&#xff0c;无法测试小程序前端服务器到服务端网络&#xff0c;并且小程序无法看到日志。所以就得从服务端和网…