当前位置: 首页 > news >正文

饿了吗网站有问题怎么办/百度推广优化是什么?

饿了吗网站有问题怎么办,百度推广优化是什么?,建站网站主题设置不能点,iis7网站建设目录 1 自定义数据集 2 分词 2.1 重写collate_fn方法 3 用BertModel加载预训练模型 4 模型试算 5 定义下游任务 6 训练 7 测试 #导包 import torch from datasets import load_from_disk #用于加载本地磁盘的datasets文件 1 自定义数据集 #自定义数据集 #…

目录

1  自定义数据集

2  分词 

 2.1  重写collate_fn方法¶

3  用BertModel加载预训练模型 

 4  模型试算

 5  定义下游任务¶

6  训练 

7  测试 


 

#导包
import torch
from datasets import load_from_disk  #用于加载本地磁盘的datasets文件

1  自定义数据集

#自定义数据集
#需要继承 torch.utils.data.Dataset,
#并且实现__init__(self)/__len__(self)/__getitem__(self,i)这些方法
class Dataset(torch.utils.data.Dataset):def __init__(self, split):#加载本地磁盘的datasetsself.datasets = load_from_disk('../data/ChnSentiCorp')  #self.datasets是一个字典,包含训练、校验、测试的datatsetself.dataset = self.datasets[split]  #使用split来区分获取的是训练、校验、测试的datatset中的哪一个def __len__(self):return len(self.dataset)def __getitem__(self, i):"""让数据集像列表一样可以根据索引获取数据‘text’与“label”"""text = self.dataset[i]['text']label = self.dataset[i]['label']return text, labeldataset = Dataset(split='train')
dataset

 

<__main__.Dataset at 0x2afb31f03a0>
dataset.dataset

 

Dataset({features: ['text', 'label'],num_rows: 9600
})
len(dataset)

 9600

dataset[0]

 

('选择珠江花园的原因就是方便,有电动扶梯直接到达海边,周围餐馆、食廊、商场、超市、摊位一应俱全。酒店装修一般,但还算整洁。 泳池在大堂的屋顶,因此很小,不过女儿倒是喜欢。 包的早餐是西式的,还算丰富。 服务吗,一般',1)

2  分词 

#分词工具导包
from transformers import BertTokenizer
#加载字典和分词工具    huggingface自带的中文词典bert-base-chinese加载进来
tokenizer = BertTokenizer.from_pretrained(r'../data/bert-base-chinese/')
tokenizer

 

BertTokenizer(name_or_path='../data/bert-base-chinese/', vocab_size=21128, model_max_length=512, is_fast=False, padding_side='right', truncation_side='right', special_tokens={'unk_token': '[UNK]', 'sep_token': '[SEP]', 'pad_token': '[PAD]', 'cls_token': '[CLS]', 'mask_token': '[MASK]'}, clean_up_tokenization_spaces=True),  added_tokens_decoder={0: AddedToken("[PAD]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),100: AddedToken("[UNK]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),101: AddedToken("[CLS]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),102: AddedToken("[SEP]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),103: AddedToken("[MASK]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
}

 2.1  重写collate_fn方法¶

自定义取数据的方法 

def collate_fn(data):#从传入的数据集data(dataset)中分离出文本句子sents和标签labelssents = [i[0] for i in data]labels = [i[1] for i in data]#编码:完成句子的分词操作data = tokenizer.batch_encode_plus(batch_text_or_text_pairs=sents,truncation=True,      #文本超过最大长度会被截断padding='max_length',  #不足最大长度,补充《pad》return_tensors='pt',   #返回的数据是pythorch类型return_length='True')#获取编码之后的数字 索引input_ids = data['input_ids']attention_mask = data['attention_mask']token_type_ids = data['token_type_ids']labels = torch.LongTensor(labels)   #labels在pythorch中一般设置成long类型return input_ids, attention_mask, token_type_ids, labels
#创建数据加载器
loader = torch.utils.data.DataLoader(dataset=dataset,  #将数据集传进来batch_size=16,    #一批数据16个collate_fn=collate_fn,  #传入自定义的取数据的方法shuffle=True,    #打乱数据drop_last=True   #最后一批数据若不满足16个数据,就删除
)for i, (input_ids, attention_mask, token_type_ids, labels) in enumerate(loader):break   #只完成赋值,不输出打印
print(len(loader))
600
print(input_ids.shape, attention_mask.shape, token_type_ids.shape, labels.shape)

 

torch.Size([16, 512]) torch.Size([16, 512]) torch.Size([16, 512]) torch.Size([16])

3  用BertModel加载预训练模型 

#Bert模型导包
from transformers import BertModel#加载预训练模型
pretrained = BertModel.from_pretrained('../data/bert-base-chinese/')#固定bert的参数:  遍历参数,修改每一个参数的requires_grad_,使其不能进行求导、梯度下降
for param in pretrained.parameters():param.requires_grad_(False)  #变量最右边添加下划线,表示直接修改变量的原始属性

 4  模型试算

out = pretrained(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids)out.last_hidden_state.shape  
#torch.Size([16, 512, 768])
#16:一批数据有16个
#512:一个句子的长度
#768:yincan#torch.Size([16, 512, 768])out.last_hidden_state[:, 0].shape  #获取cls特殊词的输出结果#torch.Size([16, 768])

 5  定义下游任务¶

class Model(torch.nn.Module):def __init__(self, pretrained_model):super().__init__()#预训练模型层self.pretrained_model = pretrained_model#输出层:全连接层#768:表示将上一层预训练模型层768个的输出结果作为全连接层的输入数据#2:表示二分类问题就会有两个输出结果self.fc = torch.nn.Linear(768, 2)#前向传播def forward(self, input_ids, attention_mask, token_type_ids):with torch.no_grad():out = pretrained(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids)#在Bert中,获取cls特殊词的输出结果来做分类任务out = self.fc(out.last_hidden_state[:, 0])out.softmax(dim=1)return out#声明模型
model = Model(pretrained)
#创建模型:输入参数
model(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids).shape#torch.Size([16, 2])  16个句子对,2个分类结果
torch.Size([16, 2]) 
torch.cuda.is_available()

 True

#设置设备
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
device

 device(type='cuda', index=0)

6  训练 

# AdamW  梯度下降的优化算法  在Adam的基础上稍微改进了一点
from transformers import AdamW  #训练
optimizer = AdamW(model.parameters(), lr=5e-4)  #设置优化器
#声明损失函数
loss = torch.nn.CrossEntropyLoss()#建模
model = Model(pretrained)
#模型训练
model.train()
#将模型传到设备上
model.to(device)
for i, (input_ids, attention_mask, token_type_ids, labels) in enumerate(loader):#把传入的数据都传到设备上input_ids = input_ids.to(device)attention_mask = attention_mask.to(device)token_type_ids = token_type_ids.to(device)labels = labels.to(device)out = model(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids)#计算损失函数l = loss(out, labels)  #out:预测值   labels:真实值#用损失函数来反向传播l.backward()#梯度更新optimizer.step()#梯度清零optimizer.zero_grad()#每隔5次,计算一下准确率if i % 5 == 0:out = out.argmax(dim=1)  #计算预测值#计算准确率accuracy =(out == labels).sum().item() / len(labels)   #item()是拿到求和之后的数字print(i, l.item(), accuracy)if i == 100:break  

 

0 0.6882429718971252 0.5
5 0.7822732329368591 0.3125
10 0.7996063828468323 0.25
15 0.7967076301574707 0.3125
20 0.839418888092041 0.3125
25 0.6795901656150818 0.5625
30 0.7707732319831848 0.3125
35 0.6784831285476685 0.4375
40 0.728607177734375 0.375
45 0.7425007224082947 0.375
50 0.6188052892684937 0.5625
55 0.7185056805610657 0.375
60 0.8377469778060913 0.1875
65 0.7717736959457397 0.3125
70 0.7421607375144958 0.4375
75 0.7337921857833862 0.375
80 0.8023619651794434 0.3125
85 0.7294195890426636 0.5625
90 0.7909258008003235 0.3125
95 0.7105788588523865 0.4375
100 0.7786014676094055 0.5

7  测试 

model.eval()用于将模型设置为评估模式。‌ 在评估模式下,模型将关闭一些在训练过程中使用的特性,如‌Dropout和BatchNorm层的训练模式,以确保模型在推理时能够给出准确的结果。使用model.eval()可以帮助我们更好地评估模型的性能,并发现潜在的问题。 

def test():model.eval()correct = 0total = 0loader_test = torch.utils.data.DataLoader(dataset = Dataset('validation'),batch_size = 32,collate_fn=collate_fn,shuffle=True,drop_last=True)for i, (input_ids, attention_mask, token_type_ids, labels) in enumerate(loader_test):#输入的数据传入到设备上input_ids = input_ids.to(device)attention_mask = attention_mask.to(device)token_type_ids = token_type_ids.to(device)labels = labels.to(device)if i == 5:breakprint(i)with torch.no_grad():out = model(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids)out = out.argmax(dim=1)correct += (out==labels).sum().item()total += len(labels)print(correct / total)
test()

 

0
1
2
3
4
0.40625

 

相关文章:

huggingface实现中文文本分类

目录 1 自定义数据集 2 分词 2.1 重写collate_fn方法 3 用BertModel加载预训练模型 4 模型试算 5 定义下游任务 6 训练 7 测试 #导包 import torch from datasets import load_from_disk #用于加载本地磁盘的datasets文件 1 自定义数据集 #自定义数据集 #…...

基于python+控制台+txt文档实现学生成绩管理系统(含课程实训报告)

目录 第一章 需求分析 第二章 系统设计 2.1 系统功能结构 2.1.1 学生信息管理系统的七大模块 2.1.2 系统业务流程 2.2 系统开发必备环境 第三章 主函数设计 3.1 主函数界面运行效果图 3.2 主函数的业务流程 3.3 函数设计 第四章 详细设计及实现 4.1 学生信息录入模块的设计与实…...

Spring Boot 整合MyBatis-Plus 实现多层次树结构的异步加载功能

文章目录 1&#xff0c;前言2&#xff0c;什么是多层次树结构&#xff1f;3&#xff0c;异步加载的意义4&#xff0c;技术选型与实现思路5&#xff0c;具体案例5.1&#xff0c;项目结构5.2&#xff0c;项目配置&#xff08;pom.xml&#xff09;5.3&#xff0c;配置文件&#xf…...

网络工程师指南:防火墙配置与管理命令大全,零基础入门到精通,收藏这一篇就够了

本指南详细介绍了防火墙的配置与管理命令&#xff0c;涵盖了防火墙的工作原理、常见配置命令、安全策略与访问控制、日志管理与故障排查&#xff0c;并通过实战案例展示了如何有效防御网络攻击。通过学习本指南&#xff0c;网络工程师能够系统掌握防火墙的配置与管理技能&#…...

英特尔终于找到了Raptor Lake处理器崩溃与不稳定问题的根源

技术背景 在过去的几个月里&#xff0c;一些用户报告称他们的第13代和第14代Intel Core“Raptor Lake”处理器遇到了系统崩溃和不稳定的情况。这些问题最初在2024年7月底被英特尔识别出来&#xff0c;并且初步的诊断显示&#xff0c;这些问题与微码有关&#xff0c;该微码使CP…...

Shp2pb:Shapefile转Protocol Buffers的高效工具

Shp2pb是一个实用工具&#xff0c;专门用于将Shapefile&#xff08;shp&#xff09;格式转换为Protocol Buffers&#xff08;protobuf&#xff09;文件。这对于以更高效、更紧凑的方式处理地理数据特别有用。以下是关于如何安装和使用Shp2pb工具的详细说明&#xff0c;以及一个…...

Elasticsearch使用Easy-Es + RestHighLevelClient实现深度分页跳页

注意&#xff01;&#xff01;&#xff01;博主只在测试环境试了一下&#xff0c;没有发到生产环境跑。因为代码还没写完客户说不用弄了( •̩̩̩̩&#xff3f;•̩̩̩̩ ) 也好&#xff0c;少个功能少点BUG 使用from size的时候发现存在max_result_window10000的限制&…...

基于ASRPRO的语音应答

做这个的起因是为了送女朋友,而且这东西本身很简单,所以在闲暇之余尝试了一下。 这个工程很简单,只通过对ASRPRO进行编程即可。 先看效果。(没有展示所有效果,后续会列出来所有对话触发) 语音助手示例1 语音助手示例2 代码部分使用天文Block编辑,找了一圈好像只…...

3D看车汽车案例,车模一键换皮肤,开关车门,轴距,电池功能

3D 汽车案例 网址&#xff1a; http://car.douchuanwei.com/...

数据结构-4.栈与队列

本篇博客给大家带来的是栈和队列的知识点, 其中包括两道面试OJ题 用队列实现栈 和 用栈实现队列. 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条, 如果分享不成功, 那我就会回你一下,那样你就分享成功啦. 你们的…...

芝士AI写作有什么特色? 大模型支撑,智能改写续写,让写作更轻松

又到了一年的毕业季&#xff0c;大学四年眨眼间匆匆就过去了&#xff0c;毕业&#xff0c;求职&#xff0c;考研&#xff0c;工作&#xff0c;升学&#xff0c;但是在这之前&#xff0c;我们必须要完成论文的写作&#xff0c;这也是每一位大学生都必须要面对~ 芝士AI官网&…...

【计网】从零开始学习http协议 --- http的请求与应答

如果你不能飞&#xff0c;那就跑&#xff1b; 如果跑不动&#xff0c;那就走&#xff1b; 实在走不了&#xff0c;那就爬。 无论做什么&#xff0c;你都要勇往直前。 --- 马丁路德金 --- 从零开始学习http协议 1 什么是http协议2 认识URL3 http的请求和应答3.1 服务端设计…...

记录linux环境下搭建本地MQTT服务器实现mqtt的ssl加密通讯

1、ubuntu安装mosquitto sudo apt-get update//安装服务端 sudo apt-get install mosquitto//安装客户端 sudo apt-get install mosquitto-clients 2、安装openssl 3、mqtts/tls加密传输 mosquitto原生支持了TLS加密&#xff0c;TLS&#xff08;传输层安全&#xff09;是SSL&…...

基于python+django+vue的电影数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…...

HJ50-四则运算:栈的运用、中缀表达式转后缀表达式并计算结果

文章目录 题目一、分析1.1表达式预处理1.2中缀表达式转后缀1.3 后缀表达式计算结果 二、答案 题目 一、分析 通过利用栈将中缀表达式转换为后缀表达式&#xff0c;在根据后缀表达式计算运算结果。由于包含负数操作数的情况&#xff0c;并且操作数位数不固定为1&#xff0c;因此…...

C++编程:实现简单的高精度时间日志记录小程序

0. 概述 为了检查是否存在系统时间跳变&#xff0c;本文使用C实现了一个简单的高精度时间日志记录小程序。该程序能够每隔指定时间&#xff08;默认40毫秒&#xff09;记录一次系统时间到文件中&#xff0c;并具备以下功能&#xff1a; 自定义时间间隔和文件名&#xff1a;通…...

QQ机器人搭建

使用QQ官方机器人Python SDK和三方框架搭建QQ群聊机器人 文章目录 使用QQ官方机器人Python SDK和三方框架搭建QQ群聊机器人前言编写机器人代码机器人监听群聊进行文字回复机器人监听群聊进行图片回复机器人监听群聊进行文件发送机器人监听群聊进行视频发送机器人监听群聊进行语…...

flink设置保存点和恢复保存点

增加了hdfs package com.qyt;import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple2;import org.apache.flink.runtime.state.storage.FileSystemCheckpointStorage;import org.apache.flink.streaming.api.datastream.Dat…...

使用python获取百度一下,热搜TOP数据详情

一、查找对应链接 # 警告&#xff1a;以下代码仅供学习和交流使用&#xff0c;严禁用于任何违法活动。 # 本代码旨在帮助理解和学习编程概念&#xff0c;不得用于侵犯他人权益或违反法律法规的行为。 1、打开百度页面 百度一下&#xff0c;你就知道 2、点击F12 或 右键鼠标…...

Go conc库学习与使用

文章目录 主要功能和特点conc 的安装典型使用场景示例代码并行执行多个 Goroutines错误处理限制并发 Goroutines 数量使用 context.Context 进行任务控制 常见问题1. **任务中发生 panic**原因&#xff1a;解决方法&#xff1a; 2. **conc.Group 重复调用 Wait()**原因&#xf…...

大模型prompt先关

对于未出现的任务&#xff0c;prompt编写技巧&#xff1a; 1、假设你是资深的摘要生成专家&#xff0c;根据提供的内容&#xff0c;总结对应的摘要信息。请生成一个指令&#xff0c;指令中带有一个使用例子。直接提供给大型模型以执行此任务。 2、基于大模型提供的内容再进行二…...

尚品汇-自动化部署-Jenkins的安装与环境配置(五十六)

目录&#xff1a; 自动化持续集成 &#xff08;1&#xff09;环境准备 &#xff08;2&#xff09;初始化 Jenkins 插件和管理员用户 &#xff08;3&#xff09;工作流程 &#xff08;4&#xff09;配置 Jenkins 构建工具 自动化持续集成 互联网软件的开发和发布&#xf…...

【尚跑】2024铜川红色照金半程马拉松赛,大爬坡152安全完赛

1、赛事背景 2024年9月22日8点&#xff0c;2024铜川红色照金半程马拉松赛于照金1933广场鸣枪起跑&#xff01; 起跑仪式上&#xff0c;6000位选手们合唱《歌唱祖国》&#xff0c;熟悉的旋律响彻陕甘边革命根据地照金纪念馆前&#xff0c;激昂的歌声凝聚心中不变的热爱。随着国…...

WPS中让两列数据合并的方法

有这样一个需求&#xff0c;就是把A列数据和B列数据进行合并&#xff08;空单元格略过&#xff09;具体实现效果如图下&#xff1a; 该如何操作呢&#xff1f; 首先在新的一列第一个单元格中输入公式"A1&B1" 然后回车&#xff0c;就出现了两列单元格数据合并的效…...

使用yum为centos系统安装软件以及使用(包含阿里云yum源配置)

centos系统配置阿里云yum源 因为centos7官方停止维护&#xff0c;自带yum源用不了了&#xff0c;所以可以更换成阿里云yum源 方法&#xff1a; 使用root权限执行以下语句 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo CentOS…...

《深度学习》【项目】OpenCV 发票识别 透视变换、轮廓检测解析及案例解析

目录 一、透视变换 1、什么是透视变换 2、操作步骤 1&#xff09;选择透视变换的源图像和目标图像 2&#xff09;确定透视变换所需的关键点 3&#xff09;计算透视变换的变换矩阵 4&#xff09;对源图像进行透视变换 5&#xff09;对变换后的图像进行插值处理 二、轮廓检测…...

Linux 线程互斥

前言 对于初学线程的伙伴来讲&#xff0c;多线程并发访问导致的数据不一致问题&#xff0c;总是让人陷入怀疑&#xff0c;很多人只是给你说加锁&#xff01;但没有人告诉你为什么&#xff1f;本篇博客将详解&#xff01; 目录 前言 一、线程互斥 • 为什么票会出现负数的情…...

【Redis 源码】6AOF持久化

1 AOF功能说明 aof.c 文件是 Redis 中负责 AOF&#xff08;Append-Only File&#xff09;持久化的核心文件。AOF 持久化通过记录服务器接收到的每个写命令来实现数据的持久化。这样&#xff0c;在 Redis 重启时&#xff0c;可以通过重放这些命令来恢复数据。 2 AOF相关配置 a…...

6.MySQL基本查询

目录 表的增删查改Insert&#xff08;插入&#xff09;插入替换插入替换2 Retrieve&#xff08;查找&#xff09;SELECT 列全列查找指定列查询查询字段为表达式为查询结果指定别名结果去重 WHERE 条件order by子句筛选分页结果 Update&#xff08;更新&#xff09;delete&#…...

Linux字符设备驱动开发

Linux 字符设备驱动开发是内核模块开发中的一个重要部分&#xff0c;主要用于处理字节流数据设备&#xff08;如串口、键盘、鼠标等&#xff09;。字符设备驱动的核心任务是定义如何与用户空间程序交互&#xff0c;通常通过一组文件操作函数进行。这些函数会映射到 open、read、…...