《深度学习》PyTorch 手写数字识别 案例解析及实现 <上>

server/2024/9/23 9:28:34/

目录

一、了解MINIST数据集

1、什么是MINIST

2、查看MINIST由来

二、实操代码

1、下载训练数据集

2、下载测试数据集

运行结果:

3、展示手写数字图片

运行结果:

4、打包图片

运行结果:

pytorch%E4%BD%BF%E7%94%A8%E7%9A%84%E8%AE%BE%E5%A4%87-toc" style="margin-left:80px;">5、判断当前pytorch使用的设备

1)torch.cuda.is_available()

2)torch.backends.mps.is_available()

3)MPS

运行结果:


一、了解MINIST数据集

1、什么是MINIST

        MINIST是一种基于神经网络的手写数字识别算法。它是LeCun等人在1998年提出的,是深度学习领域的里程碑之一。MINIST数据集包含了大量的手写数字图片,MINIST算法通过训练神经网络,可以有效地识别这些手写数字。MINIST算法在计算机视觉和模式识别中有广泛的应用,被认为是机器学习领域的经典问题之一。

        MNIST包含70,000张手写数字图像,其中60,000张用于训练,10,000张用于测试

        所有的图像都是灰度的,大小为28x28像素的,并且居中的,以减少预处理和加快运行。

2、查看MINIST由来

        进入下列网页,即可查看

https://yann.lecun.com/exdb/mnist/icon-default.png?t=O83Ahttps://yann.lecun.com/exdb/mnist/        打卡即可得到下列画面:

此时可知道这个MINIST数据集中训练集和测试集所占大小等等:

二、实操代码

1、下载训练数据集

训练数据集包含训练用的手写数字图片及其对应的标签

import torch 
print(torch.__version__)   # 查看torch版本号from torch import nn  # 导入神经网络模块,提供了构建网络所需的各种层
from torch.utils.data import DataLoader  # 数据包管理工具,打包数据,它可以将数据集封装成适合批处理的数据加载器。
from torchvision import datasets   # 封装了很多与图像相关的模型,数据集
from torchvision.transforms import ToTensor   一个数据转换操作,用于将图片数据转换为PyTorch张量(Tensor)。PyTorch中的模型只能接受张量作为输入。training_data = datasets.MNIST(   # 跳转到函数的内部源代码,pycharm 按下ctrl +鼠标点击root='data',  # 指定数据集下载后储存的根目录train=True,  # 表示下载的是训练集,如需下载测试集则更改为False即可download=True,   # 表示如果本地没有数据集,则自动下载,有则不再下载transform=ToTensor()   # 指定一个数据转换操作,即将下载的图片转换为pytorch张量tensor,因为pytorch模型只能处理张量类型的数据
)

        将代码和下列测试集代码一起运行。

2、下载测试数据集

        只需将训练数据集中的train参数结果更改为False

test_data = datasets.MNIST(root='data',train=False,download=True,transform=ToTensor()  
)  # NumPy 数组只能在CPU上运行。Tensor可以在GPU上运行,这在深度学习应用中可以显著提高计算速度。print(len(training_data))   # 打印训练集数据条数
print(len(test_data))   # 打印测试集数据条数
运行结果:

3、展示手写数字图片

from matplotlib import pyplot as plt   # 导入绘图库
figure = plt.figure()   # 设置一个空白画布
for i in range(9):img,label = training_data[i+59000]   # 提取第59000张图片开始,共9张,返回图片及其对应的标签值figure.add_subplot(3,3,i+1)   # 在画布创建3行3列的小窗口,通过遍历的值i来确定每个画布展示的图片plt.title(label)   # 设置每个窗口的标题,设置标签为上述返回的标签值plt.axis('off')   # 取消画布中的坐标轴的图像plt.imshow(img.squeeze(),cmap='gray')   # plt.imshow()将NumPy数组data中的数据显示为图像,并在图形窗口中,a = img.squeeze()   # img.squeeze()从张量img中去掉维度为1的。如果该维度的大小不为1,则张量不会改变。
plt.show()

        最后一步img.squeeze降低维度是因为遍历出来的图像有一个冗余的维度没有用,如下所示,维度为1,图像大小为28x28像素的。

运行结果:

4、打包图片

train_dataloader = DataLoader(training_data,batch_size=64)  # 调用上述定义的DataLoader打包库,将训练集的图片和标签,64张图片为一个包,
test_dataloader = DataLoader(test_data,batch_size=64)   # 将测试集的图片和标签,每64张打包成一份
for x,y in test_dataloader:# x是表示打包好的每一个数据包,其形状为[64,1,28,28],64表示批次大小,1表示通道数为1,即灰度图,28表示图像的宽高像素值# y表示每个图片标签print(f"shape of x[N,C,H,W]:{x.shape}")   # 打印图片形状print(f"shape of y:{y.shape}{y.dtype}")   # 打印标签的形状和数据类型break  # 跳出并终止循环,表示只遍历一个包的数据情况
运行结果:

pytorch%E4%BD%BF%E7%94%A8%E7%9A%84%E8%AE%BE%E5%A4%87">5、判断当前pytorch使用的设备

"""判断当前设备是否支持GPU,其中mps是苹果m系列芯片的GPU"""  # 返回cuda,mps,cpu,
device = "cuda" if torch.cuda.is_available() else 'mps' if torch.backends.mps.is_available() else "cpu"
print(f"Using {device} device")  # 字符串的格式化。CUDA驱动软件的功能:pytorch能够去执行cuda的命令,cuda通过GPU指令集
# 神经网络的模型也需要传入到GPU,1个batchsize的数据集也需要传入到GPU,才可以进行训练。
        1)torch.cuda.is_available()

                 检查CUDA是否在当前系统上可用。CUDA是NVIDIA的并行计算平台和编程模型,它允许软件利用NVIDIA图形处理单元(GPU)进行加速计算。如果CUDA可用,这意味着你的系统有NVIDIA GPU,并且PyTorch已经配置为可以使用CUDA。

        2)torch.backends.mps.is_available()

                检查MPS是否可用。请注意,这个检查通常只在Apple Silicon Macs上返回True

        3)MPS

                MPS是Apple提供的一套高性能图形和计算框架,专门设计用于Apple Silicon Macs上的Metal API。虽然MPS不直接对应于PyTorch的CUDA,但PyTorch从1.8版本开始增加了对Apple Silicon Macs的支持,通过MPS后端进行加速。

        表示如果torch.cuda.is_available()返回的是True则返回cuda,即当前使用的设备是cuda,如果返回False即执行下面的判断语句,即如果torch.backends.mps.is_available()返回的是True则返回mps,即当前使用的是苹果设备的mps,反之则使用的是cpu设备来计算。

运行结果:


http://www.ppmy.cn/server/118287.html

相关文章

c语言--力扣简单题目(回文链表)讲解

题目如下: 给你一个单链表的头节点 head ,请你判断该链表是否为 回文链表。 如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true 示例 2&#xff1…

DockerDocker Compose安装(离线+在线)

Docker&Docker Compose安装(离线在线) Docker离线安装 下载想要安装的docker软件版本:https://download.docker.com/linux/static/stable/x86_64/ 如目标机无法从链接下载,可以在本机下载后 scp docker版本压缩包[如docker-20.10.9.tgz] usernameh…

电巢科技携Ecosmos元宇宙产品亮相第25届中国光博会

第25届中国国际光电博览会(“CIOE中国光博会”)今日在深圳国际会展中心盛大开幕。本届博览会以“光电引领未来,驱动应用创新”为主题,吸引了全球超过3700家优质光电企业参展,展示了光电产业的最新成果和前沿技术。 电…

数据库语言、SQL语言、数据库系统提供的两种语言

1.数据库语言 数据库语言有很多种,其中一种是SQL语言。 2. SQL语言 【几乎所有的关系数据库系统都使用SQL语言。】 SQL语言中包含很多不同的部分,有: (1)DDL语言(Data definition language)…

Matlab simulink建模与仿真 第十七章(补充离散库和补充数学库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、补充离散库和补充数学库中的模块概览 1、补充离散库 注:每个版本的补充离散库不一定相同,也不是每个版本的库都有如上所有模块。 2、补充数学库 二、离散直接传递函数Ⅱ模块 1、…

[Unity Demo]从零开始制作空洞骑士第三集之导入插件2D toolkit和使用playmaker制作敌人状态机以及扩展FSM脚本

当你看到我这段字的时候,说明我正在火车上用手机打字,因为我要回家过中秋了但我没带电脑。但我记忆又贼差,乘着我还记得我前几个小时都干了什么我先把记得的内容都写到这里,等过两天回去了我再把代码贴出来。 首先还是感谢你坚持…

Spring扩展点系列-BeanFactoryAware

文章目录 简介源码分析示例代码示例一:验证BeanFactoryAware执行顺序示例二:动态获取其他bean示例三:动态bean的状态 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initia…

【Python笔记】PyCharm大模型项目环境配置

一、PyCharm创建新项目 二、更新pip版本 ...>python.exe -m pip install --upgrade pip 三、生成所需requirements配置文件 ...>pip freeze > requirements.txt 四、安装所需组件requirements.txt ...>pip install -r requirements.txt