Pytorch 手写数字识别 深度学习基础分享
本篇是一次内部分享,给项目开发的同事分享什么是深度学习。用最简单的手写数字识别做例子,讲解了大概的原理。
1|0手写数字识别
展示首先数字识别项目的使用。项目实现过程:
- 训练出模型
- 准备html手写板
- flask 框架搭建简单后端
2|0深度学习必备知识介绍
2|1机器学习的概念
通俗解释
机器学习的关键内涵之一在于利用计算机的运算能力从大量的数据中发现一个规律,用这个规律实现预测或判断的功能。
2|2深度学习算法分类
以算法区分深度学习应用,算法类别可分成三大类:
- 常用于图片数据进行分析处理的
卷积神经网络
- 文本分析或自然语言处理的
递归神经网络
- 常用于数据生成的
对抗神经网络
卷积神经网络(CNN)主要应用可分为图像分类、目标检测、语义分割
2|3图片保存的本质
图片在计算机中以数字矩阵的形式存储。
https://h.markbuild.com/doc/binary-viewer-cn.html
2|4模型训练的通用步骤
- 准备数据集
- 构建神经网络模型(面向对象中定义的一个类)
- 选择损失函数和优化器
- 训练模型
- 从模型训练得出数值
- 通过损失函数得到预测值和实际值的差距
- 通过优化器调整模型中的参数,让结果越来越准确
- 循环以上步骤
损失函数
:衡量训练结果和实际偏差的函数。数值越大代表差距越大
优化器
:优化模型的算法,让损失函数减小的方法
Q&A
3|0Pytorch 手写数字识别讲解
模型训练使用pytorch框架,同样可以实现的框架还由tensorflow、keras。
3|1数据集获取
手写识别使用的是MNIST数据集,手写数字图片。MNIST数据集由像素是28 × 28 的0~9的手写数字图片组成,一共有7万张图片,其中6万张是训练集,1万张是测试集。每个图片是黑底白字的形式。
pytorch 中提供了torchvision 包,可以通过该包可以下载数据集
演示
3|2模型定义
模型使用的是卷积神经网络模型
。定义的神经网络模型如下:
卷积神经网络模型组成
卷积神经网络通常由3个部分构成:卷积层,池化层,全连接层。各部分的功能:
- 卷积层:负责提取图像中的特征,可以输出一张图片的很多种特征。
- 池化层:用来缩小尺寸,大幅降低参数量级,降低计算量
- 全连接层:合并特征并输出结果
美颜相机的原理就是提取图片的特征,如下图片第二张模糊轮廓,第三张是突出轮廓。
卷积
卷积的功能
:提取图片的多种特征信息
卷积的原理
:用一个卷积核和图片的矩阵相乘,得到一个新的矩阵。新矩阵就是一个新的特征。
卷积核
卷积核也是一个矩阵,通常是33的矩阵,或者是55的矩阵。卷积运算的过程如下:
调参
:
卷积核矩阵由3*3一共9个参数组成,这些参数都是模型自动生成的,所谓的调参,其中一部分就是指调整卷积核矩阵的参数,让其提取的特征能够使预测更加准确
池化
池化的功能
:池化就是缩小矩阵的尺寸,从而减少后续操作的参数数量。通常会在相邻的卷积层之间加入一个池化层。
池化的原理
:池化的运算过程:将一个44的矩阵最大池化成22的矩阵,就是取4*4矩阵中对应区域中最大的一个数值。
池化通常有两种:
- 最大池化(max pooling):选图像区域的最大值作为该区域池化后的值。
- 平均池化(average pooling):计算图像区域的平均值作为该区域池化后的值。
全连接
全连接功能
: 全连接的作用是组合特征和分类。
在前面两个步骤中从一张图片提取多种特征,并将特征矩阵进行了压缩。当数据到达全连接层时得到是一张图片的多种特征。
某一个特征并不能说整个图片是什么,否则就是盲人摸象。那么全连接层就是将多种特征组合起来形成一个完整的特征,并根据特征计算出图片是某一个类型的概率。
全连接层最终输出就是概率。比如手写数字识别,最终全连接层输出就是某一个手写数字在0~9上的概率。
全连接的原理
全连接层实现的是特征组合,原理和卷积类似,也就是用一个卷积核对矩阵做运算,最后得到一个一维的数组,也就是0-9的概率。
调参
:全连接的实现也需要卷积核的参与,所以卷积核矩阵也是参数的一部分,调参就包括该部分的参数。
手写数字识别的模型定义
手写数字识别的卷积神经网络,下面分析卷积
+池化
+全连接
的过程:
Q&A
3|3选择损失函数和优化器
损失函数功能:衡量训练结果和实际偏差的函数。数值越大代表差距越大
优化器功能:让模型不断优化,让损失函数减小的方法
手写数字识别中使用的损失函数和优化器如下:
损失函数
手写识别中选择了交叉熵损失函数,pytorch一共有19中损失函数可以使用,比较好理解的是平方差损失函数
优化器
手写识别中选了随机梯度下降算法,用来实现反向传播参数的修改。pytorch中一共有11中优化器可以使用。
3|4模型训练
模型训练的流程:
- 定义训练的次数
- 遍历训练集,调用模型类传入图片,得到概率结果
- 通过损失函数计算损失值
- 通过优化器调整参数
- 训练完成保存模型
需要注意的点:
- 训练的规律
- my_cnn.nn 模型保存的内容
3|5Q&A
3|6模型验证
- 模型在测试集上的准确率
- 一批模型准确率展示
4|0总结
- 数据集非常重要。html手写识别中遇到的问题,以及如何解决。颜色,大小
- 数学知识。训练过程中遇到的数据知识:矩阵乘法
- 为什么需要GPU?如何使用GPU?
- 模型训练的过程。
卷积
+池化
+全连接
+损失函数
+优化器
- 目标检查的训练过程和手写识别有何不同?
图像分类:LeNet、AlexNet、VGG、GoogLeNet
目标检测:RCNN、Fast RCNN、Faster RCNN、YOLO、YOLOv2、SSD
__EOF__

本文链接:https://www.cnblogs.com/goldsunshine/p/18595278.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2021-12-09 比文件操作os库更优异的标准库pathlib