Transformers x SwanLab:可视化NLP模型训练

HuggingFace 的 Transformers 是目前最流行的深度学习训框架之一(100k+ Star),现在主流的大语言模型(LLaMa系列、Qwen系列、ChatGLM系列等)、自然语言处理模型(Bert系列)等,都在使用Transformers来进行预训练、微调和推理。

在这里插入图片描述
SwanLab是一个深度学习实验管理与训练可视化工具,由西安电子科技大学团队打造,融合了Weights & Biases与Tensorboard的特点,能够方便地进行 训练可视化、多实验对比、超参数记录、大型实验管理和团队协作,并支持用网页链接的方式分享你的实验。

在这里插入图片描述

你可以使用Transformers快速进行模型训练,同时使用SwanLab进行实验跟踪与可视化。
下面将用一个Bert训练,来介绍如何将Transformers与SwanLab配合起来:

1. 代码中引入SwanLabCallback

from swanlab.integration.huggingface import SwanLabCallback

SwanLabCallback是适配于Transformers的日志记录类。

SwanLabCallback可以定义的参数有:

  • project、experiment_name、description 等与 swanlab.init 效果一致的参数, 用于SwanLab项目的初始化。
  • 你也可以在外部通过swanlab.init创建项目,集成会将实验记录到你在外部创建的项目中。

2. 传入Trainer

from swanlab.integration.huggingface import SwanLabCallback
from transformers import Trainer, TrainingArguments
...# 实例化SwanLabCallback
swanlab_callback = SwanLabCallback()trainer = Trainer(...# 传入callbacks参数callbacks=[swanlab_callback],
)

3. 案例-Bert训练

查看在线实验过程:BERT-SwanLab

在这里插入图片描述

下面是一个基于Transformers框架,使用BERT模型在imdb数据集上做微调,同时用SwanLab进行可视化的案例代码

"""
用预训练的Bert模型微调IMDB数据集,并使用SwanLabCallback回调函数将结果上传到SwanLab。
IMDB数据集的1是positive,0是negative。
"""import torch
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from swanlab.integration.huggingface import SwanLabCallback
import swanlabdef predict(text, model, tokenizer, CLASS_NAME):inputs = tokenizer(text, return_tensors="pt")with torch.no_grad():outputs = model(**inputs)logits = outputs.logitspredicted_class = torch.argmax(logits).item()print(f"Input Text: {text}")print(f"Predicted class: {int(predicted_class)} {CLASS_NAME[int(predicted_class)]}")return int(predicted_class)
# 加载IMDB数据集
dataset = load_dataset('imdb')# 加载预训练的BERT tokenizer
tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')# 定义tokenize函数
def tokenize(batch):return tokenizer(batch['text'], padding=True, truncation=True)# 对数据集进行tokenization
tokenized_datasets = dataset.map(tokenize, batched=True)# 设置模型输入格式
tokenized_datasets = tokenized_datasets.rename_column("label", "labels")
tokenized_datasets.set_format('torch', columns=['input_ids', 'attention_mask', 'labels'])# 加载预训练的BERT模型
model = AutoModelForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)# 设置训练参数
training_args = TrainingArguments(output_dir='./results',eval_strategy='epoch',save_strategy='epoch',learning_rate=2e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,logging_first_step=100,# 总的训练轮数num_train_epochs=3,weight_decay=0.01,report_to="none",# 单卡训练
)CLASS_NAME = {0: "negative", 1: "positive"}# 设置swanlab回调函数
swanlab_callback = SwanLabCallback(project='BERT',experiment_name='BERT-IMDB',config={'dataset': 'IMDB', "CLASS_NAME": CLASS_NAME})# 定义Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets['train'],eval_dataset=tokenized_datasets['test'],callbacks=[swanlab_callback],
)# 训练模型
trainer.train()# 保存模型
model.save_pretrained('./sentiment_model')
tokenizer.save_pretrained('./sentiment_model')# 测试模型
test_reviews = ["I absolutely loved this movie! The storyline was captivating and the acting was top-notch. A must-watch for everyone.","This movie was a complete waste of time. The plot was predictable and the characters were poorly developed.","An excellent film with a heartwarming story. The performances were outstanding, especially the lead actor.","I found the movie to be quite boring. It dragged on and didn't really go anywhere. Not recommended.","A masterpiece! The director did an amazing job bringing this story to life. The visuals were stunning.","Terrible movie. The script was awful and the acting was even worse. I can't believe I sat through the whole thing.","A delightful film with a perfect mix of humor and drama. The cast was great and the dialogue was witty.","I was very disappointed with this movie. It had so much potential, but it just fell flat. The ending was particularly bad.","One of the best movies I've seen this year. The story was original and the performances were incredibly moving.","I didn't enjoy this movie at all. It was confusing and the pacing was off. Definitely not worth watching."
]model.to('cpu')
text_list = []
for review in test_reviews:label = predict(review, model, tokenizer, CLASS_NAME)text_list.append(swanlab.Text(review, caption=f"{label}-{CLASS_NAME[label]}"))if text_list:swanlab.log({"predict": text_list})swanlab.finish()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 相关链接

  • Transformers文档:🤗 Transformers
  • SwanLab官网:SwanLab - 在线AI实验平台,一站式跟踪、比较、分享你的模型
  • SwanLab官方文档:SwanLab官方文档 | 先进的AI团队协作与模型创新引擎

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

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

相关文章

Mowgli用于配对多组学整合

对同一组细胞的多个分子层进行分析逐渐流行。越来越需要能够联合分析这些数据的多视图学习方法。Mowgli是一种支持配对多组学数据的整合方法。值得注意的是,Mowgli将非负矩阵分解和最优传输相结合,同时提高了非负矩阵分解的聚类性能和可解释性。作者将Mo…

android studion 一直编译失败

无外网,无法下载对应的库导致编译失败 配置代理 1.修改镜像源 资源路径 为国内镜像 如下为国美腾讯软件镜像 distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-8.6-bin.zip 2.构建仓储失败 无法下载。 添加国内仓储如下位置,重新…

SAP MM模块后台配置(下)

3.10 采购订单的审批过程 配置路径 IMG->物料管理-采购-采购订单-审批过程-含分类的过程 事务代码 SPRO 配置请求号 配置描述:我们用这个配置来进行九牧集团用到的采购订单的审批策略的定义: 配置屏幕: …

Jmeter元件及基本作用域

🚀从今天开始学习性能测试工具——Jmeter,小梦也是先学习了下Jmeter的元件概念以及其基本的作用域,整理了下笔记,希望不管是从事开发领域还是测试领域的朋友们,我们一起学习下Jmeter工具,提升工作中的技能&…

【软考】下篇 第12章 信息系统架构设计理论与实践

目录 一、信息系统架构的定义二、信息系统架构风格三、信息系统架构分类四、信息系统常用的4种架构模型(SCSB)五、企业信息系统的总体框架ISA六、TOGAF & ADM七、信息化总体架构方法信息化六要素信息化架构模式信息系统生命周期(规分设实…

7个靠谱的副业赚钱方法,宝妈,上班族,学生党可以做的兼职副业

你是否也曾面临过这样的困境:生活费紧张,想要找份兼职来补贴家用或是满足自己的小心愿?别担心,今天我将带领你踏入这个丰富多彩的兼职世界,助你轻松达成月入过千的小目标! 在我漫长的兼职探索旅程中&#…

【区域脑图论文笔记】BrainNetCNN:第一个专门为脑网络连接体数据设计的深度学习框架

【区域脑图论文笔记】BrainNetCNN:第一个专门为脑网络连接体数据设计的深度学习框架 信息概览与提炼采用的数据与结果数据集结果概览一眼 重点图与方法概览核心与优劣总结模型与实验论文方法E2E的理解E2N的理解N2G的理解三个卷积层设计的理解 论文实验与讨论 总结与…

力扣232. 用栈实现队列(两栈实现队列)

Problem: 232. 用栈实现队列 文章目录 题目描述思路Code 题目描述 思路 利用两个栈,一个入栈一个出栈搭配着实现队列的相关操作: 1.创建两个栈stack1和stack2; 2.void push(int x):将要入队的元素先入栈stack1; 3.int pop()&…

倒计时 1 天!「飞天技术沙龙-CentOS 迁移替换专场」演讲亮点一览

各位开发者们: 「飞天技术沙龙 - CentOS 迁移替换专场」即将于本周三在北京召开!昨天,小龙为参会者公布了详细参会指南,今天带大家了解各演讲内容亮点。 活动时间:5 月 29 日(本周三) 13:30-17…

pod容器基础概念

一 Pod基础概念: ①Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个 Pod代表着集群中运行的一个进程。一个pod包含一个或多个容器。如:应用容器/业务容器(淘 宝、京东、拼多多后台&#xff…

水电自动抄表系统是什么?

1.简述:水电自动抄表系统 水电自动抄表系统是一种现代化计量检定解决方法,为提升公用事业服务项目的效率和精确性。传统式手动抄水表方法已经被这类高效率、精准的自动化系统所替代,它能够实时、远程控制地收集解决水电使用数据。 2.系统原…

国产性能怪兽——香橙派AI Pro(8T)上手体验报告以及性能评测

目录 1、引言2、性能参数3、开箱体验4、实际使用5、性能比较总结参考文章 1、引言 第一次接触香橙派的开发板,之前使用过Arduino、树莓派3B、树莓派4B,STM32,51单片机,没有想到国产品牌性能一样强劲,使用起来也是很方便…

Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (八)

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

鸿蒙开发接口图形图像:【@ohos.screen (屏幕)】

屏幕 本模块提供管理屏幕的一些基础能力,包括获取屏幕对象,监听屏幕变化,创建和销毁虚拟屏幕等。 说明:开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。…

LBank研究院: DePIN赛道解析|加密精神与Jevons悖论的第三世界

作者:Eva,LBank研究员 *本人谨代表作者观点,不构成任何交易建议。 *本文内容为原创,版权为LBank所有,如需转载请注明作者和出处,否则将追究法律责任。 TLDR: DePIN是对传统老牌硬件的洗牌挑战&#xff…

节水“云”科普丨北京昌平VR节水云展馆精彩上线

2024年5月15日上午,由北京昌平区水务局主办的“推进城市节水,建设美丽昌平——2024年全国城市节约用水宣传周暨‘坚持节水优先 树立节水标杆’昌平节水在行动主题实践活动”隆重举办,活动期间,昌平区水务局应用VR虚拟现实技术创新…

你什么时候感觉学明白Java了?

学是学不明白Java的,要学明白Java,一定只能在工作以后。 1 在学习阶段,哪怕是借鉴别人的学习路线,其实依然会学很多不必要的技能,比如jsp,swing,或者多线程,或者设计模式。 2 或者…

php 变量值传递和引用传递

一、值传递和引用传递 二、在foreach 中的引用传递 public function actionR(){$a [a>1,b>2,];foreach ($a as &$item){$i 100;$item $i;}$b [a>1,b>2];foreach ($b as &$item){$i 99;$item $i;}var_dump($a,$b);}可见 在两个foreach 中&$item …

md5强弱碰撞

一,类型。 1.弱比较 php中的""和""在进行比较时,数字和字符串比较或者涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。按照此理,我们可以上传md5编码后是0e的字符串,在…

nginx流量监控:goAccess安装与使用

关于goAccess GoAccess 是一款实时、快速的日志分析工具,专门设计用于分析Web服务器日志,特别是Nginx日志。 安装 (1)准备相关依赖 # Missing development libraries for ncursesw # centOS yum install -y ncurses-devel # U…