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

NLP任务:情感分析、看图说话

我可不向其他博主那样拖泥带水,我有代码就直接贴在文章里,或者放到gitee供你们参考下载,虽然写的不咋滴,废话少说,上代码。

gitee码云地址:

卢东艺/pytorch_cv_nlp - 码云 - 开源中国 (gitee.com)icon-default.png?t=N7T8https://gitee.com/Ludongyi/pytorch_cv_nlp

一、情感分析

外卖评论(好评坏评)二分类

用线性模型来做比较简单,就是个简单的二分类,模型代码如下:

用RNN模型来做,可用RNN,GRU,LSTM模型,对于这种简单二分类模型,随便选一个都得,后面复杂的模型才考虑其他。

由图可以看出,训练20次,损失值一直在下降,然后开始震荡并逐渐收敛,训练的准确率一直在上升,当到达20次时,训练的准确率达到97%,进行模型测试,测试准确率只有86%,很明显的过拟合现象,不用慌,自己解决。

二、看图说话

Image Caption多模态任务,根据图片生成描述文字

数据集:

Flickr30k数据集是一个基于Flickr网站的数据集,它包括了31000张图像和每张图像准确的5个人工标注语句。该数据集的图像类型

非常丰富,从日常生活场景到复杂的社会场景都有涉及,本文只使用5条标注语句的第一条作为计算损失函数的输入。
下载地址:Flickr30k图像标注数据集下载及使用方法_flickr30k下载-CSDN博客

网络模型结构:

编码器部分

vgg16的卷积模块进行提取特征:

解码器部分

模型的训练结果如下:

在英伟达P4000显卡的加持下,每轮训练需要7分钟,128批次, 21轮训练损失值才降到1 ,可见这个模型还是有些复杂的,没有好的显卡的人可以去AutoDL算力云 租算力来跑。

测试案例:

一只白色的狗一只狗站在他面前看着嘴里的棍子

从网上下载一张图片进行预测,从预测的结果可以看出,预测的描述有点错误,分析原因,可能是整个网络还不够复杂,vgg16网络没有很好提取狗的嘴巴特征,LSTM预测的词不是很好。额,什么狗屁预测。

改进模型:

增加注意力机制: 在LSTM中引入注意力机制,使模型能够动态地关注图像中不同区域的信息,从而改善生成描述的精度和连贯性......

避坑

建议训练和测试都放到一个程序里,也就是训练完毕接着测试显示结果。我的代码是训练和测试分开的,是不同的进程。然后我发现每次运行词典都不一样,每次都会有不一样的id和乱序,这会造成一个问题,训练一半保存参数,下次加载模型参数重新训练时导致损失值很高而难以下降,因为词典的序号都变了,上次训练的参数语义信息不适用当前。还有如果你训练和测试都效果不错,过几天后发现预测效果很差,可能是一不小心运行数据处理部分,生成了新的词典了。所以,需要保存词典,而且只保存一次,下次加载处理接着用该词典,固定住词典。

在词典里没有的词模型是预测不出来的,所以如果发现模型预测的效果差,可能是词典里的单词少了,可以到网上找常用的英语单词5万个,搞成一个大的词典 .pkl格式,保存起来,方便自然语言处理的学习使用。

统计正确率:

 生成的文本与目标的文本如何才能判断是预测对的,太难判断了。就算计算两个文本的相似度,相似度大于0.5正确,小于则错误,但是,以上面的图片为例子,目标文本是两只小狗亲嘴,如果生成了草地的预测文本,相似度为0 ,但是你能说它预测不正确吗,草地也属于图片的潜在描述之一。

所以,这里不统计正确率。

深度学习之Image captioning的评分指标篇(BLEU、CIDEr)_bleu和cider-CSDN博客

python中计算BLEU分数_python 计算blue分数-CSDN博客

创新点:

1.动态调参技术

训练模型时参数是固定的,也就是一旦运行代码,就只能看着输出的结果,而不能手动改变里面的参数,如果在训练时发现损失值已经震荡收敛了,还继续训练这就造成资源的浪费,所以,这就要人为的进行控制调参,使程序能正常运行又不浪费资源。

本模型采用tkinter库进行GUI调参,控制模型的训练次数和学习率。

界面如图所示:

开一个线程,运行调参窗口,里面设置模型需要改变的重要参数。如学习率初始值为0.003,训练次数初始值为30。训练过程观测损失值的变化,如果损失值的改变量变小了,就把学习率调小为0.001甚至更小 ;如果损失值开始震荡收敛,就把训练次数改为当前轮的值,使训练完当前轮后就自然退出模型的训练,进行测试;如果训练了30次后损失值还有下降的趋势,就增大训练次数。

虽然GUI调参很方便,但多开一个线程也耗费了一定的资源,而且,这方法只适合有模型训练经验的人,有经验的调参大师。

2.训练过程提醒技术

有时候模型训练的时间需要很久,训练模型的人应该不会一直看着模型的训练过程,这时候需要需要一项提醒技术,每训练完一轮或者全部训练完毕,可以提醒训练者。

WxPusher微信消息推送服务介绍:WxPusher (微信推送服务)是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用WxPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。 WxPusher微信推送服务

用户收到消息后,微信会响通知铃声,用户进入微信查看具体消息文字。

参考:shenxiaohai.me/pytorch-tutorial-advanced-04/

三、经验分享

数据处理类 继承 Dataset类,然后要写 def __len__() 和 def __getitem__(item)这两个特殊函数。def __len__()函数返回的是处理数据的大小,可以把它看成是循环调用def __getitem__(item)函数的次数,比如返回的是10,就调用10次__getitem__函数,__getitem__处理并返回了10个数据。

设计模型时先训练一批次的数据  (Dataset类里def __len__()返回batch_size大小,把模型设计好后,保证能正常运行出结果,再用全部数据。

策略:写代码时__len__()函数返回的大小分别采用一批次,一半,全部。

假如你一下子处理了全部数据,开始设计模型,运行,处理数据跑了一分钟,模型报了一个错,你修改模型代码,跑了一分钟,又报了一个错,又修改......等你能正确运行代码,浪费了很多时间。而刚开始就只处理一批数据,一下子就能出结果。所以我写代码刚开始只用一批次是验证代码能不能正常运行。

代码能正常运行了,我就把数据量增大到一半,用来验证模型的损失值和正确率是否正常,是否出现过拟合现象,模型是否需要改进......没问题后,我就处理完全部数据,继续增大训练,再观察效果,最后完工。

嫌数据集数量多,先不着急删除(万一突然想要用到),先只处理一部分数据训练看看效果,最后再决定删不删除。

要加检测损失值,连续2次震荡就停止训练,记得每隔几次保存一次模型参数,不然中途退出就白干。

训练集和验证集都计算损失值和准确率,观测数据之间的变化。

其他的经验自己多跑模型就能总结出来,跳过很多坑的过来人默默留下了眼泪(手动狗头)

未完待续...... 

相关文章:

NLP任务:情感分析、看图说话

我可不向其他博主那样拖泥带水,我有代码就直接贴在文章里,或者放到gitee供你们参考下载,虽然写的不咋滴,废话少说,上代码。 gitee码云地址: 卢东艺/pytorch_cv_nlp - 码云 - 开源中国 (gitee.com)https:/…...

Linux桌面溯源

X窗口系统(X Window System) Linux起源于X窗口系统(X Window System),亦即常说的X11,因其版本止于11之故。 X窗口系统(X Window System,也常称为X11或X)是一种以位图方式显示的软件窗口系统。…...

深入Linux:权限管理与常用命令详解

文章目录 ❤️Linux常用指令🩷zip/unzip指令🩷tar指令🩷bc指令🩷uname指令🩷shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理🩷文件访问者的分类&#…...

Mojo 编程语言:AI开发者的新宠儿

Mojo(Meta Object Oriented programming for Java Objects)是一种面向对象的编程语言,旨在简化和加速Java应用程序的开发过程。作为近年来新兴的编程语言,Mojo因其与Java的紧密集成以及AI开发领域的应用潜力而逐渐成为AI开发者的新…...

ARM/Linux嵌入式面经(十):极氪

开篇强调两个事情: pdf文件都在百度网盘群:911289806一定要把超链接里面的文章看了,那都是为了你们写的。老板!!!现在多学点,涨个2k工资,真的很值得。要不吃学习的苦,要不吃生活的苦。 1. 自我介绍 专开新篇,等我! 2. 项目介绍,提问 专开新篇,等我! 3. SPI通信和…...

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程 新增网卡 新增网卡的首先当然需要关闭PVE母机,把新网卡插上,我用淘宝遥现金搞了个红包,花了26元买了块SSU的2.5G网卡。说实话这个价位连散热片都没有,确实挺丐的。稍后测下速度看…...

数学建模美赛入门

数学建模需要的学科知识 高等数学线性代数 有很多算法的掌握是需要高等数学和线代的相关知识 如:灰色预测模型需要微积分知识;神经网络需要用到导数知识;图论和层次分析法等都需要用到矩阵计算的相关知识等; 概率论与数理统计&am…...

两段序列帧动画播放,在ios机型上出现闪屏

使用场景:两段序列帧动画连接播放,先播放第一段播一次,再播放第二段,第二段循环播放,在ios机型上出现动画闪动,播放不正常。 错误的写法:把每一段序列帧动画单独写在了定义的动画里 .gacha-bg…...

【C++深度探索】全面解析多态性机制(二)

🔥 个人主页:大耳朵土土垚 🔥 所属专栏:C从入门至进阶 这里将会不定期更新有关C/C的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 前言 我…...

MySQL配置数据库的连接命令

MySQL配置数据库连接命令 在MySQL中,配置数据库连接的命令涉及创建用户、授予权限、配置主从复制等多个方面。以下是常用的命令及其用途: 创建用户 创建一个新的数据库用户并为其设置密码: CREATE USER usernamehost IDENTIFIED BY passwo…...

[PaddlePaddle飞桨] PaddleSpeech-自动语音识别-小模型部署

PaddleSpeech的GitHub项目地址 环境要求&#xff1a; gcc > 4.8.5 paddlepaddle < 2.5.1 python > 3.8 OS support: Linux(recommend), Windows, Mac OSXpip下载指令&#xff1a; python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.c…...

redis查询慢,你们是如何排查优化的?(总结篇)

1&#xff0c;先进行基准测试&#xff0c;查看redis是否存在查询过慢情况&#xff0c;根据自己的情况而定 2、检查网络连接是否出现延迟&#xff0c;数据丢包问题&#xff08;可能性小 3、开启慢查询日志&#xff0c;通过日志可以清楚知道哪些命令比较耗时&#xff0c;同时避…...

Docker 容器出现 IP 冲突

Docker 容器出现 IP 冲突的情况可能由以下几个原因导致&#xff1a; 静态 IP 分配&#xff1a;如果你在 docker-compose.yml 文件中为多个容器手动设置了相同的静态 IP 地址&#xff0c;那么这些容器在启动时就会出现 IP 冲突。确保每个容器分配的静态 IP 地址是唯一的。桥接网…...

paddlepaddle2.6,paddleorc2.8,cuda12,cudnn,nccl,python10环境

1.安装英伟达显卡驱动 首先需要到NAVIDIA官网去查自己的电脑是不是支持GPU运算。 网址是&#xff1a;CUDA GPUs | NVIDIA Developer。打开后的界面大致如下&#xff0c;只要里边有对应的型号就可以用GPU运算&#xff0c;并且每一款设备都列出来相关的计算能力&#xff08;Compu…...

【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(上)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架1.2.7 Observable 记事本 1…...

如何在Linux上如何配置虚拟主机

在Linux上配置虚拟主机可以通过使用Apache HTTP服务器来实现。Apache是一个开源的跨平台的Web服务器软件&#xff0c;可以在多种操作系统上运行并支持虚拟主机的配置。 以下是在Linux上配置虚拟主机的步骤&#xff1a; 安装Apache HTTP服务器 在终端中运行以下命令来安装Apache…...

c语言alpha-beta剪枝六子棋

c语言Alpha-Beta剪枝算法六子棋[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2i5w8kc1-1720756528545)(https://i-blog.csdnimg.cn/direct/464b9db7d6384a63ab8c3213efff0e99.png)] 1.介绍 Alpha-Beta剪枝算法是一种用于优化博弈树搜索的算法&…...

基于PyTorch深度学习实践技术应用

近年来&#xff0c;Python语言由于其开源、简单等特点&#xff0c;受到了广大程序开发者的偏爱&#xff0c;丰富的函数库使得其在各行各业中得到了广泛的应用。伴随着新一轮人工智能&#xff08;尤其是深度学习&#xff09;的快速发展&#xff0c;许多深度学习框架应运而生&…...

数据湖仓一体(五)安装spark

上传安装包到/opt/software目录并解压 [bigdatanode106 software]$ tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/services/ 重命名文件 [bigdatanode106 services]$ mv spark-3.3.1-bin-hadoop3 spark-3.3.1 配置环境变量 [bigdatanode106 ~]$ sudo vim /etc/profile…...

项目收获总结--本地缓存方案选型及使用缓存的坑

本地缓存方案选型及使用缓存的坑 一、摘要二、本地缓存三、本地缓存实现方案3.1 自己编程实现一个缓存3.2 基于 Guava Cache 实现本地缓存3.3 基于 Caffeine 实现本地缓存3.4 基于 Encache 实现本地缓存3.5 小结 四、使用缓存的坑4.1 缓存穿透4.2 缓存击穿4.3 缓存雪崩4.4 数据…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...