NLP任务:情感分析、看图说话
我可不向其他博主那样拖泥带水,我有代码就直接贴在文章里,或者放到gitee供你们参考下载,虽然写的不咋滴,废话少说,上代码。
gitee码云地址:
卢东艺/pytorch_cv_nlp - 码云 - 开源中国 (gitee.com)https://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项目地址 环境要求: gcc > 4.8.5 paddlepaddle < 2.5.1 python > 3.8 OS support: Linux(recommend), Windows, Mac OSXpip下载指令: python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.c…...
redis查询慢,你们是如何排查优化的?(总结篇)
1,先进行基准测试,查看redis是否存在查询过慢情况,根据自己的情况而定 2、检查网络连接是否出现延迟,数据丢包问题(可能性小 3、开启慢查询日志,通过日志可以清楚知道哪些命令比较耗时,同时避…...
Docker 容器出现 IP 冲突
Docker 容器出现 IP 冲突的情况可能由以下几个原因导致: 静态 IP 分配:如果你在 docker-compose.yml 文件中为多个容器手动设置了相同的静态 IP 地址,那么这些容器在启动时就会出现 IP 冲突。确保每个容器分配的静态 IP 地址是唯一的。桥接网…...

paddlepaddle2.6,paddleorc2.8,cuda12,cudnn,nccl,python10环境
1.安装英伟达显卡驱动 首先需要到NAVIDIA官网去查自己的电脑是不是支持GPU运算。 网址是:CUDA GPUs | NVIDIA Developer。打开后的界面大致如下,只要里边有对应的型号就可以用GPU运算,并且每一款设备都列出来相关的计算能力(Compu…...
【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(上)
当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js?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服务器软件,可以在多种操作系统上运行并支持虚拟主机的配置。 以下是在Linux上配置虚拟主机的步骤: 安装Apache HTTP服务器 在终端中运行以下命令来安装Apache…...
c语言alpha-beta剪枝六子棋
c语言Alpha-Beta剪枝算法六子棋[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2i5w8kc1-1720756528545)(https://i-blog.csdnimg.cn/direct/464b9db7d6384a63ab8c3213efff0e99.png)] 1.介绍 Alpha-Beta剪枝算法是一种用于优化博弈树搜索的算法&…...

基于PyTorch深度学习实践技术应用
近年来,Python语言由于其开源、简单等特点,受到了广大程序开发者的偏爱,丰富的函数库使得其在各行各业中得到了广泛的应用。伴随着新一轮人工智能(尤其是深度学习)的快速发展,许多深度学习框架应运而生&…...
数据湖仓一体(五)安装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 数据…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...

leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...