【深度学习基础】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.hqwc.cn/news/159866.html

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

相关文章

云安全-云原生k8s攻击点(8080,6443,10250未授权攻击点)

0x00 k8s简介 k8s(Kubernetes) 是容器管理平台,用来管理容器化的应用,提供快速的容器调度、弹性伸缩等诸多功能,可以理解为容器云,不涉及到业务层面的开发。只要你的应用可以实现容器化,就可以部…

C++之初始化列表详细剖析

一、初始化列表定义 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。 class Date { public:Date(int year, int month, int day): _year(year), _month(mont…

STM32-高级定时器

以STM32F407为例。 高级定时器 高级定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能都是针对工业电机控制方面。 功能框图 16位向上、向下、向上/向下自动重装载计数器。 16位可编程预分频器&#xff0c…

软件测试/测试开发丨利用ChatGPT 生成自动化测试脚本

点此获取更多相关资料 简介 自动化测试脚本可以模拟用户与应用程序的交互,例如点击按钮、输入数据、导航到不同的页面等等,以验证应用程序的正确性、性能和稳定性。 自动化测试在回归测试、冒烟测试等测试流程中都可以极大地起到节省时间、节省人力的作…

第二十六章 BEV感知系列三(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。所需前期知识,可以结合手写AI进行系统的学习。 BEV感知系列是对论文Delving into the De…

0002Java安卓程序设计-基于Uniapp+springboot菜谱美食饮食健康管理App

文章目录 开发环境 《[含文档PPT源码等]精品基于Uniappspringboot饮食健康管理App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 功能介绍&#xff…

美团面试:Redis 除了缓存还能做什么?可以做消息队列吗?

这是一道面试中常见的 Redis 基础面试题,主要考察求职者对于 Redis 应用场景的了解。 即使不准备面试也建议看看,实际开发中也能够用到。 内容概览: Redis 除了做缓存,还能做什么? 分布式锁:通过 Redis 来做分布式锁是一种比较常见的方式。通常情况下,我们都是基于 Re…

yolov5简易使用

1.环境配置 从github上下载好yolov5源码后,根据requirement文件配置环境,使用conda新建一个仿真环境,接着使用 pip install -r requirements.txt 来安装环境,安装后首先运行detect.py 发现安装后的环境不能使用,报…

山西电力市场日前价格预测【2023-11-05】

日前价格预测 预测说明: 如上图所示,预测明日(2023-11-05)山西电力市场全天平均日前电价为192.40元/MWh。其中,最高日前电价为374.84元/MWh,预计出现在04:15。最低日前电价为0.00元/MWh,预计出…

【C++初阶】类与对象(二)

目录 前言:一、构造函数1.1 构造函数概念1.2 为什么有构造函数1.3 构造函数的写法及使用1.4 默认构造函数1.5 哪些可为默认构造函数 二、析构函数2.1 析构函数概念2.2 为什么有析构函数2.3析构函数的写法及使用2.4 默认析构函数 三、拷贝构造函数3.1 拷贝构造函数概…

node教程(四)Mongodb+mongoose

文章目录 一、mongodb1.简介1.1Mongodb是什么?1.2数据库是什么?1.3数据库的作用1.4数据库管理数据的特点 2.核心概念3.下载安装与启动4.命令行交互4.1数据库命令4.3文档命令 二、Mongoose1.介绍2.作用3.使用流程4.插入文档5.mongoose字段类型 一、mongod…

windows + Mingw32-make 编译 PoDoFo库,openssl, libjpeg, Msys2工具的使用

参考: https://blog.csdn.net/sspdfn/article/details/104244306 https://blog.csdn.net/yaoyuanyylyy/article/details/17436303 https://blog.csdn.net/wxlfreewind/article/details/106492253 前期进行了各种摸索,由于Podofo依赖库比较多&#xff0c…