python pytorch tensorflow transforms 模型培训脚本

环境准备
https://www.doubao.com/thread/w5e26d6401c003bb2

执行培训脚本

import torch
from torch.utils.data import Dataset, DataLoader
from transformers import DistilBertTokenizer, DistilBertForSequenceClassification, AdamW
import numpy as np# 自定义数据集类
class SentimentDataset(Dataset):def __init__(self, texts, labels, tokenizer, max_length):self.texts = textsself.labels = labelsself.tokenizer = tokenizerself.max_length = max_lengthdef __len__(self):return len(self.texts)def __getitem__(self, idx):text = self.texts[idx]label = self.labels[idx]encoding = self.tokenizer.encode_plus(text,add_special_tokens=True,max_length=self.max_length,padding='max_length',truncation=True,return_tensors='pt')return {'input_ids': encoding['input_ids'].flatten(),'attention_mask': encoding['attention_mask'].flatten(),'labels': torch.tensor(label, dtype=torch.long)}# 新增问答数据
qa_texts = ["李白是那个朝代的诗人?", "地球的卫星是什么?", "中国的首都是哪里?", "水的化学式是什么?", "苹果公司的创始人是谁?"]
qa_labels = [1, 2, 3, 4, 5]  # 为每个问题分配一个唯一的标签# 合并数据
all_texts = qa_texts
all_labels = qa_labels# 初始化 tokenizer
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')# 创建数据集和数据加载器
dataset = SentimentDataset(all_texts, all_labels, tokenizer, max_length=128)
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)# 初始化模型,注意 num_labels 需要根据总标签数调整
model = DistilBertForSequenceClassification.from_pretrained('distilbert-base-uncased', num_labels=8)# 定义优化器,加入 weight_decay 进行正则化
optimizer = AdamW(model.parameters(), lr=1e-4, weight_decay=0.01)# 训练模型
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)# 早停策略相关参数
best_loss = float('inf')
patience = 3
counter = 0for epoch in range(20):  # 增加训练轮数,但结合早停策略total_loss = 0model.train()for batch in dataloader:input_ids = batch['input_ids'].to(device)attention_mask = batch['attention_mask'].to(device)labels = batch['labels'].to(device)optimizer.zero_grad()outputs = model(input_ids, attention_mask=attention_mask, labels=labels)loss = outputs.lossloss.backward()optimizer.step()total_loss += loss.item()avg_loss = total_loss / len(dataloader)print(f'Epoch {epoch + 1}, Loss: {avg_loss}')# 早停策略if avg_loss < best_loss:best_loss = avg_losscounter = 0else:counter += 1if counter >= patience:print("Early stopping triggered!")break# 处理提问的函数
def handle_query(model, tokenizer, query_text, device):model.eval()with torch.no_grad():encoding = tokenizer(query_text, return_tensors='pt', padding=True, truncation=True, max_length=128).to(device)logits = model(**encoding).logitspredictions = np.argmax(logits.cpu().numpy(), axis=1)return predictions# 情感标签映射
label_mapping = {1: "唐朝",2: "月球",3: "北京",4: "H2O",5: "史蒂夫·乔布斯、史蒂夫·沃兹尼亚克和罗恩·韦恩"
}# 针对新增的5条数据提问
query_text = ["李白是那个朝代的诗人?", "地球的卫星是什么?", "中国的首都是哪里?", "水的化学式是什么?", "苹果公司的创始人是谁?"]
result = handle_query(model, tokenizer, query_text, device)
readable_result = [label_mapping[pred] for pred in result]
print("Query result:", readable_result)

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

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

相关文章

request库基础学习

requests安装 Windows &#xff1a;pip install requests mac &#xff1a; python3 -m pip install requests requests模块常用方法 方法含义requests.get()发起get请求requests.post()发起post请求requests.put()发起put请求requests.delete()发起delete请求requests.sess…

Redis客户端Jedis、Lettuce 和 Redisson优缺点总结

https://developer.huawei.com/consumer/cn/blog/topic/03825550899620047 Redis 官方推荐的 Java 客户端有Jedis、Lettuce 和 Redisson。本文总结这些客服端的优缺点 1. Jedis Jedis 是老牌的 Redis 的 Java 实现客户端&#xff0c;提供了比较全面的 Redis 命令的支持&#…

在 Spring Boot 中调用 AnythingLLM 的发消息接口

整体逻辑: 自建系统的web UI界面调用接口: 1.SpringBoot接口&#xff1a;/anything/chatMessageAnything 2.调用anythingLLM - 调用知识库deepseek r1 . Windows Installation ~ AnythingLLMhttps://docs.anythingllm.com/installation-desktop/windows http://localhost:3…

kubectl describe pod 命令以及输出详情讲解

kubectl describe pod 命令格式 kubectl describe pod <pod-name> -n <namespace><pod-name>&#xff1a;Pod 的名称。 -n <namespace>&#xff1a;指定命名空间&#xff0c;默认是当前命名空间。 controlplane ~ ✖ kubectl describe pod newpods-d…

Python生成和安装requirements.txt

概述 看到别的大佬项目中&#xff0c;requirements.txt文件&#xff0c;里面包含了所需要的依赖及版本&#xff0c;方便项目管理和安装。 生成 requirements.txt 文件 pip3 freeze > requirements.txt生成的依赖包有点多&#xff0c;感觉可以根据自己需要整理。 安装req…

WebGL学习2

WebGL&#xff08;Web Graphics Library&#xff09;是一种基于 OpenGL ES 2.0 的 JavaScript API&#xff0c;用于在网页上实现高性能的 3D 图形渲染。 1. 初始化 WebGL 上下文 在使用 WebGL 之前&#xff0c;需要获取<canvas>元素并创建 WebGL 上下文。 // 获取canv…

零知识证明:区块链隐私保护的变革力量

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

【java】集合的基本使用

集合是 Java 中用来存储一组对象的容器。与数组相比&#xff0c;集合更加灵活和强大&#xff0c;支持动态增删元素、自动扩容、多种数据结构等特性。下面我会用通俗易懂的语言解释集合的基本使用。 1. 什么是集合&#xff1f; 集合就像是一个“容器”&#xff0c;可以用来装很多…

WPF-实现按钮的动态变化

MVVM 模式基础 视图模型&#xff08;ViewModel&#xff09;&#xff1a;MainViewModel类作为视图模型&#xff0c;封装了与视图相关的属性和命令。它实现了INotifyPropertyChanged接口&#xff0c;当属性值发生改变时&#xff0c;通过OnPropertyChanged方法通知视图进行更新&am…

主流NoSQL数据库类型及选型分析

在数据库领域&#xff0c;不同类型的数据库针对不同场景设计&#xff0c;以下是四类主流NoSQL数据库的对比分析&#xff1a; 一、核心特性对比 键值数据库&#xff08;Key-Value&#xff09; 数据模型&#xff1a;简单键值对存储 特点&#xff1a;毫秒级读写、高并发、无固定…

西门子PLC

西门子PLC与C#通信全解析&#xff1a;从协议选型到实战开发 一、西门子PLC通信协议概述 西门子PLC支持多种通信协议&#xff0c;需根据设备型号及项目需求选择&#xff1a; S7协议 西门子私有协议&#xff0c;适用于S7-200/300/400/1200/1500系列PLC特点&#xff1a;直接访问…

Visual Studio(VS)的 Release 配置中生成程序数据库(PDB)文件

最近工作中的一个测试工具在测试多台设备上使用过程中闪退&#xff0c;存了dump&#xff0c;但因为是release版本&#xff0c;没有pdb&#xff0c;无法根据dump定位代码哪块出了问题&#xff0c;很苦恼&#xff0c;查了下怎么加pdb生成&#xff0c;记录一下。以下是具体的设置步…

★ Linux ★ 进程(上)

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起学习 linux 进程~ ​❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 Linux专栏&#xff1a;https://blog.csdn.net/2302_80328146/category_12815302…

JAVA并发-volatile底层原理

volatile相当于是一个轻量级的synchronized&#xff0c;一般作用在变量上&#xff0c;它具有三个特性&#xff1a;可见性、有序性&#xff0c;相比于synchronized&#xff0c;他的执行成本更低。 先来说可见性&#xff0c;java存在共享变量不可见性的原因就是&#xff0c;线程…

Java面试第十一山!《SpringCloud框架》

大家好&#xff0c;我是陈一。如果文章对你有帮助&#xff0c;请留下一个宝贵的三连哦&#xff5e; 万分感谢&#xff01; 目录 一、Spring Cloud 是什么​ 二、Spring Cloud 核心组件​ 1. 服务发现 - Eureka​ 2. ​负载均衡 - Ribbon​ 3. 断路器 - Hystrix​ ​​4. …

Transaction rolled back because it has been marked as rollback-only问题解决

transaction rolled back because it has been marked as rollback-only 简略总结> 发生场景&#xff1a;try-catch多业务场景 发生原因&#xff1a;业务嵌套&#xff0c;事务管理混乱&#xff0c;外层业务与内层业务抛出异常节点与回滚节点不一致。 解决方式&#xff1a;修…

sql server数据迁移,springboot搭建开发环境遇到的问题及解决方案

最近搭建springboot项目开发环境&#xff0c;数据库连的是sql server&#xff0c;遇到许多问题在此记录一下。 1、sql server安装教程 参考&#xff1a;https://www.bilibili.com/opus/944736210624970769 2、sql server导出、导入数据库 参考&#xff1a;https://blog.csd…

【数学建模】灰色关联分析模型详解与应用

灰色关联分析模型详解与应用 文章目录 灰色关联分析模型详解与应用引言灰色系统理论简介灰色关联分析基本原理灰色关联分析计算步骤1. 确定分析序列2. 数据无量纲化处理3. 计算关联系数4. 计算关联度 灰色关联分析应用实例实例&#xff1a;某企业生产效率影响因素分析 灰色关联…

Spring配置文件-Bean实例化三种方式

无参构造方法实例化 工厂静态方法实例化 工厂实例方法实例化

SSL 和 TLS 认证

SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接层&#xff09;认证是一种用于加密网络通信和验证服务器身份的安全技术。它是TLS&#xff08;Transport Layer Security&#xff0c;传输层安全协议&#xff09;的前身&#xff0c;虽然现在大多数应用使用的是TLS&…