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

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【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.mzph.cn/news/130260.shtml

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

相关文章

springboot常见网络相关错误及原因解析

在基于spring-boot开发过程尤其是上线后,经常出现网络相关的错误,令人难以琢磨和下手,所以就spring-boot使用过程中可能碰到的网络相关问题进行分析,结合网络转包、日志报错和前端输出,针对网络连接超时、连接被拒绝、…

默认路由配置

默认路由: 在末节路由器上使用。(末节路由器是前往其他网络只有一条路可以走的路由器) 默认路由被称为最后的关卡,也就是静态路由不可用并且动态路由也不可用,最后就会选择默认路由。有时在末节路由器上写静态路由时…

自动驾驶算法(五):Informed RRT*算法讲解与代码实现(基于采样的路径规划) 与比较

目录 1 RRT*与Informed RRT* 2 Informed RRT*代码解析 3 完整代码 4 算法比较 1 RRT*与Informed RRT* 上篇博客我们介绍了RRT*算法:我们在找到一个路径以后我们还会反复的搜索。 Informed RRT*算法提出的动机(motivation)是能否增加渐近最优的速度呢?…

【数据结构】树家族

目录 树的相关术语树家族二叉树霍夫曼树二叉查找树 BST平衡二叉树 AVL红黑树伸展树替罪羊树 B树B树B* 树 当谈到数据结构中的树时,我们通常指的是一种分层的数据结构,它由节点(nodes)组成,这些节点之间以边&#xff08…

基于级联延迟信号消除的锁相环(CDSC_PLL)技术MATLAB仿真

微❤关注“电气仔推送”获得资料(专享优惠) 基于级联型延迟信号消除(CDSC)的锁相环技术(CDSC-PLL),该锁相环克服了传统dq 锁相环在电网电压畸变或不对称时存在较大稳态误差的缺点。CDSC-PLL是在…

Ansible中的任务执行控制

循环 简单循环 {{item}} 迭代变量名称 loop: - value1 - value2 - ... //赋值列表{{item}} //迭代变量名称循环散列或字典列表 - name: create filehosts: host1tasks:- name: file moudleservice:name: "{{ item.name }}"state: "{{…

FRI及相关SNARKs的Fiat-Shamir安全

1. 引言 本文主要参考: Alexander R. Block 2023年论文 Fiat-Shamir Security of FRI and Related SNARKsAlbert Garreta 2023年9月在ZK Summit 10上分享 ZK10: Fiat-Shamir security of FRI and related SNARKs - Albert Garreta (Nethermind) 评估参数用的Sage…

Git客户端软件 Tower mac中文版特点说明

Tower mac是一款Mac OS X系统上的Git客户端软件,它提供了丰富的功能和工具,帮助用户更加方便地管理和使用Git版本控制系统。 Tower mac软件特点 1. 界面友好:Tower的界面友好,使用户能够轻松地掌握软件的使用方法。 2. 多种Git操…

edge浏览器的隐藏功能

1. edge://version 查看版本信息 2. edge://flags 特性界面 具体到某一特性:edge://flags/#overlay-scrollbars 3. edge://settings设置界面 详情可参考chrome: 4. edge://extensions 扩展程序页面 5. edge://net-internals 网络事件信息 6. edge://component…

excel制作透视表

场景描述: 有一张excel表,存在多条记录,现在需要把相同名称的商品的数量求和,放在一起展示 操作步骤: 删除最后一行数据 选中不显示分类汇总 以表格形式展示

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式) 一、所用材料: STM32F103C6T6最小系统板 STM32CUBEMX(HAL库软件) MDK5 示波器或者逻辑分析仪 二、所学内容: 通过定时器TIM的输出比较模式得到预…

第21期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练 Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

【计算机网络实验/wireshark】tcp建立和释放

wireshark开始捕获后,浏览器打开xg.swjtu.edu.cn,网页传输完成后,关闭浏览器,然后停止报文捕获。 若捕获不到dns报文,先运行ipconfig/flushdns命令清空dns缓存 DNS报文 设置了筛选条件:dns 查询报文目的…

BO(Business Object)是一种用于表示业务对象的设计模式

BO是 Business Object 的缩写,是一种用于表示业务对象的设计模式。在Java中,BO的主要作用是 封装业务逻辑,实现业务流程的可重用性和可维护性。 BO主要有以下几个作用: 实现业务逻辑的封装:将业务逻辑封装在BO对象中&a…

【完美世界】石昊拒绝云曦相认,爱而不得,云曦悲伤无助

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料《完美世界云曦篇》最新一集,为了云曦,石昊不远十万里,亲自送她回家,这份感情之真挚,绝对毋庸置疑。然而,令人感到不解的是&…

【KVM】软件虚拟化和硬件虚拟化

前言 大家好,我是秋意零。 今天介绍的内容是虚拟化技术以及软件虚拟化和硬件虚拟化。 👿 简介 🏠 个人主页: 秋意零🔥 账号:全平台同名, 秋意零 账号创作者、 云社区 创建者🧑 个…

HCIA数据通信——路由协议

数据通信——网络层(OSPF基础特性)_咕噜跳的博客-CSDN博客 数据通信——网络层(RIP与BGP)_咕噜跳的博客-CSDN博客 上述是之前写的理论知识部分,懒得在实验中再次提及了。这次做RIP协议以及OSPF协议。不过RIP协议不常用…

Mac连接linux的办法(自带终端和iterm2)

1. 使用Mac自带终端Terminal 1.1 点击右上角的聚焦搜索,再输入终端 1.2 查找linux系统的ip地址 在虚拟机里输入如下命令,找到蓝色区域的就是ip地址 ip addr 如果没有显示ip地址,可以重新安装一下虚拟机,之后确保以太网的连接是打…

【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序+VScode建立工程+usb组件添加+-基础样例学习】

【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序-基础样例学习】 1、概述2、实验环境3-1、 物品说明3-2、所遇问题:ESP32 cannot open source file "tinyusb.h"或者“tinyusb.h:No such file or directory ....”3-3、解决问题&#…

京东大数据平台(京东数据分析):9月京东牛奶乳品排行榜

鲸参谋监测的京东平台9月份牛奶乳品市场销售数据已出炉! 9月份,牛奶乳品市场销售呈大幅上涨。鲸参谋数据显示,今年9月,京东平台牛奶乳品市场的销量为2000万,环比增长约65%,同比增长约3%;销售额为…