【深度学习基础】Pytorch框架CV开发(2)实战篇

news2024/11/24 22:27:43

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • 人工神经网络识别手写数字
  • 使用卷积神经网络识别手写数字
  • ONNX模型导出与推理


人工神经网络识别手写数字

Mnist数据集介绍:MNIST数据集是一个入门级的计算机视觉数据集,可以广泛应用于机器学习的训练和测试。它包含各种尺寸是28*28的手写数字图片,其中有60000个训练样本集和10000个测试样本集。这个数据集是由来自250个不同人手写的数字构成的,一般来自高中生和工作人员,保证了其多样性。每张图片都是二进制存储,格式为灰度图像,其标签是1×784的数字出现概率。
在这里插入图片描述
构建识别数字手写体的人工神经网络
在这里插入图片描述
其中,隐藏层一共100个结点(神经元),输出层一共10个结点,代表10个类别。输入一共784个像素点。在这里插入图片描述
模型训练过程的设置
1.超参数设置:主要是批次和学习率。
2.优化器的选择:求梯度的方法选择,更新参数更好。
3.训练epoch:所有数据训练完一次就是一个epoch。
模型训练代码解读:
在这里插入图片描述

模型测试代码解读:
在这里插入图片描述
模型加载也可以理解为模型推理。
预测和推理时候的数据输入格式要跟训练的时候保持一致。也就是说两者对图像的预处理方式要完全相同。

模型保存方式:一共两种。
方法1:Torch.save(model,path);
方法2:Torch.save(model.state_dict(),path)
☆第二种方法相比第一种保存了模型的参数。推荐使用第二种。

模型加载方式:一共两种。
方法1:对应保存模型的方法1
model=torch.load(path)
Model.eval()
方法2:对应保存模型的方法2,用于加载保存了参数的模型。
model=model.load_state_dict(torch.load(path))
Model.eval()

eval函数的作用:网络的某些层(dropout / bn)在训练时候需要用到,但是在测试的时候需要修改一些参数才能预测准确,而修改参数就是这个eval函数的作用。

使用卷积神经网络识别手写数字

网络结构 构建卷积神经网络来识别手写数字,其网络结构如下图所示: 由卷积层、池化层、激活函数和全连接层组成。

在这里插入图片描述

解读网络结构图:

weighut(8x1x3x3)表示输入图像为单通道,因此卷积核也是单通道,大小为3X3。一共8个卷积核,因此输出8张特征图,理解为8通道。Bias(8)表示每个卷积核携带一个偏置,一共八个。
weighut(32x8x3x3)表示输入图像是8通道的,因此需要八通道的卷积核来过滤,大小为3X3。一共32个卷积核,因此输出32张特征图,理解为32通道。Bias(32)表示每个卷积核携带一个偏置,一共32个。
经过上述的操作后生成7X7(尺寸)X32(通道数)的特征图,作为全连接层的输入。第一个全连接层输出200个参数,经过激活函数后;进入第二个全连接层,输出100个参数,再次经过激活函数;进入第三个全连接层,输出10个参数,也就是通过logsoftmax判断这个输入数字跟0-9之间的置信度,越高说明越接近这个真实值。

根据结构图编写代码
在这里插入图片描述

对所构建的模型进行训练与测试
1.选择损失函数:交叉熵损失函数
2.选择优化器:Adam 关于优化器的选择问题,目前证明Adam的效果要比SGD的要好。
3.模型训练:选择使用GPU
4.模型保存
5.模型加载和测试

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

ONNX模型导出与推理

ONNX简介:模型一般保存为pt或是pth格式,而其他深度学习框架的格式又有所不同,因此为了部署的时候可以使用通用的格式,推出了ONNX格式。
因此需要将Pytorch模型转换为ONNX格式,也就是pt或是pth格式转换为ONNX格式 ONNX介绍:ONNX,全称Open Neural Network Exchange,即开放神经网络交换,是一个开放的生态系统。它使人工智能开发人员在推进项目时能够自由选择工具,不会受到特定框架或生态系统的限制。ONNX本质上是一种针对机器学习所设计的开放式的文件格式,主要用于存储训练好的模型。其核心作用在于为不同的深度学习框架(如Pytorch,
MXNet等)提供一个共同的中间表示格式,使得这些框架可以进行模型之间的转换。

在这里插入图片描述
ONNX格式在opencv和openvino上都可以运行。

ONNX格式模型转换方法
例如:
在这里插入图片描述
首先,使用load_state_dict(状态字典)函数加载模型。
然后,使用torch.onnx.export函数进行转换。
注意在转换函数中需要填入第二个参数,这个参数要求格式为输入图像跟训练时一样,也就是1X1X28X28。并且是张量数据类型。
第三个参数是转换后的模型名称。
ONNX格式模型在opencv中使用
在这里插入图片描述

思考感悟 反思卷积神经网络比人工神经网络的优越性: 人工神经网络工作前提通过全像素提取特征,然后多层感知机进行分类。 卷积神经网络通过卷积提取特征,然后使用全连接层进行分类。 卷积层提取特征的能力要比人工神经网络好很多。 卷积核的通道数越多,能力越强。
模型转换过程中,一定要先执行eval(),才能正确导出。

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

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

相关文章

我的大语言模型微调踩坑经验分享

由于 ChatGPT 和 GPT4 兴起,如何让人人都用上这种大模型,是目前 AI 领域最活跃的事情。当下开源的 LLM(Large language model)非常多,可谓是百模大战。面对诸多开源本地模型,根据自己的需求,选择…

文件夹还在,里面文件没了?问题这样解决

文件夹还在但文件无故消失怎么办?文件的消失对于我们来说可能是个令人沮丧且困惑的问题。有时候,我们可能会发现文件夹依然存在,但其中的文件却消失了。在这篇文章中,我们将探讨为什么电脑文件会无故消失的原因,并提供…

【Kafka】基本概念

文章目录 一、消息队列的流派1.1 有Broker1.1.1 重topic1.1.2 轻topic 1.2 无Broker 二、kafka安装三、kafka基本术语四、发送消息五、消费消息六、单播消息七、多播消息八、查看消费组的详细信息九、主题topic十、分区十一、kafka中消息⽇志⽂件中保存的内容 一、消息队列的流…

微信-Native支付(扫二维码支付)工具类 2023最新保姆教程

0、照着微信开发文档 取到证书、秘钥等 好几个key 1、获取商户号merchantId 账户中心->商户信息->微信支付商户号 3、获取商户证书序列号merchantSerialNumber 账户中心->API安全->API证书管理 5、获取appID 产品中心->AppID账号管理 1、这个链接教你获取各…

1220*2440mm建筑模板木工板:桥梁工程中的覆膜板选择

在桥梁工程中,选择合适的建筑模板木工板至关重要。其中,1220*2440mm规格的建筑模板木工板作为一种常见的选择,特别适用于混凝土工程和桥梁建设。本文将重点介绍这种规格的木工板作为覆膜板在桥梁工程中的应用。 1220*2440mm建筑模板木工板是一…

RISC Zero zkVM架构

1. 引言 RISC Zero zkVM为: 基于 FRI PLONK 构建的采用Von Neumann架构的ZK Machine将RISC-V微控制器 具化为 某基于STARK的证明系统,的微架构和编码机制。 2. Row (Time) Structure 一个cycle对应1个memory transaction,对用户传入的程…

嵌入式Linux HID多指触控/触摸设备报表描述符

这里只做一下简单记录,更为详细的修改流程后续的文章再介绍。 报表描述符 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x04, // Usage (Touch Screen) 0xA1, 0x01, // Collection (Application) 0x85, 0x01, // Report ID (1) 0…

jbase实现业务脚本化

经过晚上和早上的努力,终于补上框架最后一块了,业务脚本侦听变化后自动编译jar包和调用,实现维护成本低,开发效率高的框架的基本体系。 实现自动编译jar包的类 package appcode;import org.w3c.dom.Document; import org.w3c.do…

Android 数据恢复的顶级软件分享

人们经常向我们询问有关 Android 数据恢复软件的信息以及它们是否有用。而且,我们给他们讲了两个朋友的故事——凯伦和亚历克斯。他们都丢失了 Android 手机上的一些重要数据。 丢失数据确实是一个令人心碎的时刻,根据丢失的文件,可能会让您…

Linux高级命令(扩展)三

一、date命令 1、date命令的作用 date命令的主要作用:用于获取计算机操作系统的系统时间 2、获取计算机的系统时间 # date 3、定制时间格式 # date "%F %T %Y %m %d %H %M %S" %F : 2020-04-03 %T : 09:45:36 %Y : 年 %m : 月 %d : 日 %H : 小时 %M…

这个超实用的门禁技巧,让办公楼安全更简单高效!

门禁监控是现代社会中不可或缺的一部分,用于确保安全和管理进出某个区域的人员。随着科技的不断发展,门禁监控已经远离了传统的机械锁和钥匙,变得更加智能化和高效。 客户案例 企业办公大楼 无锡某大型企业在其办公大楼内部部署了泛地缘科技…

【机器学习 | PipeLine】机器学习通用管道最佳实践!!(无论什么问题都能套上,确定不来看看?)

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

任正非说:只有“有为”才会“有位”,任何组织只有在流程中创造价值,才可能获得成长的机会。

你好!这是华研荟【任正非说】系列的第28篇文章,让我们聆听任正非先生的真知灼见,学习华为的管理思想和管理理念。 一、所有一切要符合未来的作战需要,组织是为了作战而存在的,而不是作战服从组织的。 来源于任正非先生…

RK-3399pro 萤火虫firefly 官方unbuntu 固件系统安装搜狗中文输入法

RK-3399pro 萤火虫firefly 官方unbuntu 固件系统安装搜狗输入法(适用于所有基于Ubuntu的UI桌面系统) 一、添加中文语言支持输入法平台fcitx 1.安装fcitx sudo apt-get install fcitx 2.然后设置fcitx为开机自启动 sudo cp /usr/share/applications/fc…

Python进阶之推导式与生成器

文章目录 一、推导式1.列表推导式2.字典推导式3.集合推导式4.元组推导式(生成器推导式) 二、生成器1.生成器表达式2.生成器函数3.send函数 结束语 💂 个人主页:风间琉璃🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联…

【数智化人物展】华院计算董事长、创始人宣晓华:通用大模型只是起点,尚需结合专业知识方能解决行业核心问题...

宣晓华 本文由华院计算董事长、创始人宣晓华投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 大模型的出现,正在开启着国内新一轮AI热潮。 某种程度上,真正在当下决定企业成败的&#…

22款奔驰S400L升级原厂 360全景影像 高清环绕的视野

您是否经历过这种场面呢? 停车位,狭窄障碍停车困难 避免盲区,倒车盲区危及生命安全 狭窄路段,无法判断是否安全通过 视角盲区,小孩站在视野盲区看不到 360度无缝3D全车可见,解决各个视角盲区&#xff…

开发一款直播弹幕游戏需要多少钱?

开发一款直播弹幕游戏需要多少钱?有好多朋友在咨询过弹幕游戏的开发价格后,都会比较吃惊,一款体量这么小的游戏为什么动辄就要几万块甚至十几万? 我来给你们说分析一下原因,这种游戏如果脱离开直播间,可以…

算法通关村第五关-黄金挑战LRU问题

大家好我是苏麟 , 今天聊聊LRU问题 , 相信学过操作系统的小伙伴并不陌生 . LRU问题 LRU的含义 LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。 图解 : 如果再有其他元素就依…

ST表与RMQ(倍增表)

【概述】 RMQ : Range Maximum/minimum Query 这就是指区间最大或最小值(区间最值) ST表:Spars Table,一种可以解决 RMQ 的,基于倍增的数据结构,利用 ST 算法预处理打出的表,称为 ST 表。 …