【深度学习基础】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(),才能正确导出。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMware 虚拟机安装 CentOS 7

CentOS 7 1. 下载CentOS 7 iso镜像 Index of /centos/7.9.2009/isos/x86_64/ 2. Vmware安装CentOS 7 安装教程: 超详细VMware CentOS7(最小安装)安装教程_虚拟机最小化安装-CSDN博客 【精选】VMware 安装 Centos7 详细过程_vm虚拟机安装centos7_expectation Fu…

VBA快速动态考勤统计

实例需求:某公司的上下班打卡记录如下所示,其中Table_In为上班打卡记录,Table_Out为下班打卡记录。 现在需要根据日期整理为如下格式的考勤表。需要注意如下几点: 每天的打卡次数不确定最后一列Total/Day统计该天的出勤总时长&a…

04.Oracle的体系架构

Oracle的体系架构 一、主要组件二、Oracle的实例 一、主要组件 下面是一张网图,大家可以了解一下oracle的体系架构 Oracle数据库的体系架构可以分为以下几个主要组件:实例(Instance)、数据库(Database)、…

【React】03.脚手架的进阶应用

文章目录 暴露webpack配置暴露前后的区别config文件夹:scripts文件夹:package.json 常见的配置修改1.把sass改为less2.配置别名3.修改域名和端口号4.修改浏览器兼容5.处理Proxy跨域 2023年最新珠峰React全家桶【react基础-进阶-项目-源码-淘系-面试题】 …

JVM 内存和 GC 算法

文章目录 内存布局直接内存执行引擎解释器JIT 即时编译器JIT 分类AOT 静态提前编译器(Ahead Of Time Compiler) GC什么是垃圾为什么要GC垃圾回收行为Java GC 主要关注的区域对象的 finalization 机制GC 相关算法引用计数算法(Reference Count…

Iceberg 基础知识与基础使用

1 Iceber简介 1.1 概述 为了解决数据存储和计算引擎之间的适配的问题,Netflix开发了Iceberg,2018年11月16日进入Apache孵化器,2020 年5月19日从孵化器毕业,成为Apache的顶级项目。 Iceberg是一个面向海量数据分析场景的开放表格…

Cross-Entropy Loss(多分类损失函数)

文章目录 1. 网络输出output:score2. Cross-Entropy Loss(多分类损失函数) 1. 网络输出output:score 2. Cross-Entropy Loss(多分类损失函数) 先用softmax function把score 变成 probabilities。再用交叉熵损失函数来进行Loss的计算

设计模式(23)解释器模式

一、介绍: 1、定义:解释器(Interpreter)模式是一种对象的行为模式。给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 2、组成结构: (1&…

C#__对Json文件的解析和序列化

Json: 存储和交换文本信息的语法。(类似XML,语法独立) 一种轻量级的数据交换格式。(更小,更快,更易解析) 语法规则: 数据在键值对里面,数据由逗号分隔开。 …

android display 杂谈(三)WMS

用来记录学习wms,后续会一点一点更新。。。。。。 代码:android14 WMS是在SystemServer进程中启动的 在SystemServer中的main方法中,调用run方法。 private void run() { // Initialize native services.初始化服务,加载andro…

Azure 机器学习 - 无代码自动机器学习的预测需求

了解如何在 Azure 机器学习工作室中使用自动化机器学习在不编写任何代码行的情况下创建时序预测模型。 此模型将预测自行车共享服务的租赁需求。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕…

面试算法47:二叉树剪枝

题目 一棵二叉树的所有节点的值要么是0要么是1,请剪除该二叉树中所有节点的值全都是0的子树。例如,在剪除图8.2(a)中二叉树中所有节点值都为0的子树之后的结果如图8.2(b)所示。 分析 下面总结什么样的节…

【RtpSeqNumOnlyRefFinder】webrtc m98: ManageFrameInternal 的帧决策过程分析

Jitterbuffer(FrameBuffer)需要组帧以后GOP内的参考关系 JeffreyLau 大神分析 了组帧原理而参考关系(RtpFrameReferenceFinder)的生成伴随了帧决策 FrameDecisionFrameDecision 影响力 帧的缓存。调用 OnAssembledFrame 传递已经拿到的RtpFrameObject 那么,RtpFrameObject…

【面试专题】设计模式篇①

1.工厂设计模式 工厂设计模式是一种创建型模式,它提供了一种创建对象的接口,但具体创建的对象类型可以在运行时决定。工厂设计模式主要解决的是创建对象的灵活性问题。 工厂设计模式主要包括简单工厂模式、工厂方法模式和抽象工厂模式三种。 简单工厂…

深度学习之基于YoloV5的道路地面缺陷检测系统(UI界面)

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、道路地面缺陷检测系统四. 总结 一项目简介 基于YoloV5的道路地面缺陷检测系统利用深度学习中的目标检测算法,特别是YoloV5算法&am…

antd Cascader级联菜单无法赋值回显问题

说起来太丢人了,自己还拿官网例子在这里调试半天,最后发现是一个特别小儿科的问题哈哈 Cascader级联数据是服务端返回然后自己处理过的,使用了cascader的fileNames属性重置字段名,最后发现服务端回传的数据无法赋值回显在组件上&…

vscode设置保存后,自动格式化代码

第一步:打开setting.json文件 第二步:在setting.json中加入以下代码 "editor.formatOnType": true, "editor.formatOnSave": true, "editor.formatOnPaste": true

开发小程序需要多少钱?

随着移动互联网的快速发展,小程序已经成为了企业、个人创业者获取用户、提升品牌影响力的重要工具。然而,对于许多初次接触小程序的人来说,开发小程序需要多少钱,是他们最关心的问题。 首先我们需要明确的是,开发小程…

算法题:870. 优势洗牌

该算法是临时想出来的,Java代码的实现在时间上不占优,之后有时间要优化一下,目前就是给大家提供一下思路。 解题思路:田忌赛马的思想 贪心法。 Step1. 对两个数组进行排序。 Step2. 同时遍历排序后的nums2和nums1,将…

C++初阶(八)类和对象

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、Static成员1、Static概念2、Static特性3、试题 二、友元1、友元的类型2、友元函数3、 友元…