pytorch实现图像分类任务-手写数字识别(一)

news/2024/11/16 14:28:25/

Pytorch手写数字识别

Minst数据集介绍

Size: 28×28 灰度手写数字图像
Num: 训练集 60000 和 测试集 10000,一共70000张图片
Classes: 0,1,2,3,4,5,6,7,8,9

在这里插入图片描述
一共包含四个文件夹:

train-images-idx3-ubyte.gz:训练集图像(9912422 字节)55000张训练集 + 5000张验证集;
train-labels-idx1-ubyte.gz:训练集标签(28881 字节)训练集对应的标签;
t10k-images-idx3-ubyte.gz:测试集图像(1648877 字节)10000张测试集;
t10k-labels-idx1-ubyte.gz:测试集标签(4542 字节)测试集对应的标签;

读取数据集并进行绘制

PyTorch加载数据:Dataset和Dataloader

  • dataset:取数据以及其对应的label,并未其添加索引

    提供一种方式去获取数据及其label
    实现:
    (1)如何获取每一个数据及其label
    (2)告诉我们总共有多少的数据

  • dataloader:为后面的网络提供不同的数据形式

  1. datasets.MNIST是Pytorch的内置函数torchvision.datasets.MNIST,通过这个可以导入数据集。

  2. train=True 代表我们读入的数据作为训练集(如果为true则从training.pt创建数据集,否则从test.pt创建数据集download=True则是当我们的根目录(root)下没有数据集时,便自动下载。

  3. transform则是读入我们自己定义的数据预处理操作

  4. 如果这时候我们通过联网自动下载方式download我们的数据后,它的文件路径是以下形式:

下载测试集和训练集

from torchvision import datasets, transformstrain_data = datasets.MNIST(root="./MNIST", train=True, transform=transforms.ToTensor(), download=True)test_data = datasets.MNIST(root="./MNIST", train=False, transform=transforms.ToTensor(), download=True)
print(train_data)
print(test_data)

在这里插入图片描述

matplotlib进行数据可视化

DataLoader前置知识

使用 DataLoader 为训练准备数据

Dataset每次检索数据集中的一组特征和标签。然而,在训练模型时,通常希望

以“小批量”的形式传递样本,这种小批量集合了数个样本(比如16个、64个

等);并且在每个回合( epoch)都能打乱数据,以减少模型过拟合,并使用

Python的multiprocessing加速数据检索。在这种需求的引导下,DataLoader应

运而生。PyTorch提供了一个简单易用的API——DataLoader,能实现上述数据
进入训练的复杂过程的高度抽象化。

DataLoader其实可以理解成一个高效率的迭代器(iterater),并被PyTorch很好的封装。他的使用非常简单:

from torch.utils.data import DataLoader#训练数据的DataLoder,小批量数量64,打乱数据可选项为True
train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)#测试数据的DataLoder,小批量数量64,打乱数据可选项为True
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)
遍历 DataLoader

将该数据集加载到DataLoader后,可以根据需要对数据集进行迭代和遍历。下面的每次迭代都会返回一批train_特征和train_标签(分别包含batch_size=64个特征和标签)。因为已经指定了shuffle=True,所以在迭代所有批处理之后,数据会被打散。如需要更细粒度地控制数据加载顺序,可以使用Samplers)。

迭代和显示特征与标签(image and label)

train_features, train_labels = next(iter(train_dataloader))
print(f"Feature batch shape: {train_features.size()}")
print(f"Labels batch shape: {train_labels.size()}")
img = train_features[0].squeeze()
label = train_labels[0]
plt.imshow(img, cmap="gray")
plt.show()
print(f"Label: {label}")

数据可视化具体实现

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

import torchvision
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import numpy as np
import matplotlib.pyplot as plttrain_data = datasets.MNIST(root="./MNIST",train=True,transform=transforms.ToTensor(),download=False)train_loader = DataLoader(dataset=train_data,batch_size=64,shuffle=True)for num, (image, label) in enumerate(train_loader):image_batch = torchvision.utils.make_grid(image, padding=2)plt.imshow(np.transpose(image_batch.numpy(), (1, 2, 0)), vmin=0, vmax=255)plt.show()print(label)

在这里插入图片描述

在这里插入图片描述
总结:通过循环遍历训练集的形式:可以查看数据集的图片形式和label张量的形式。


http://www.ppmy.cn/news/192204.html

相关文章

直播声卡解决手机边充电边听歌的问题

现在,直播已成为常态。因为手机性能的提升,再加上手机的便携,简单易用,网络使用方便等特性,用手机直播更是成为主流。那么,直播声卡的性能就成为各大主播关注的点。《TYPE-C边直播边充》 图中可以看到&…

LabVIEW声卡调用(更换声卡后报错处理lvsound2.dll)

LabVIEW调用lvsound2.dll更换声卡后报错处理 使用LabVIEW调用声卡进行播放,或者采集时: 情况1:使用同一设备(USB类型),拔出后再插入可正确识别调用 情况2:使用多种设备,当拔出后插…

android采集声卡,农步祥作品 - Android系统下使用USB声卡音质测评报告 [Soomal]

虽然网上一直有Android系统设备支持通用USB音频设备的相关讨论,可外接USB声卡使用,而基于Linux核心的Android系统支持USB声卡似乎也是理所当然的事情,但我们在手头上的手机和平板电脑都无法实践成功。 这款迷你电脑运行Android4.1系统&#x…

理论:声卡概论

声卡 又称为声效卡,是一块能实现音频信号和数字信号相互转换的硬件电路板 声卡的分类 按采样频率分 8位、16位、32位、64位 采样频率:每秒钟音频信号采集的次数,即声音频率保真度 采频率越多,保真度越好 采样频率为44.1HZ&#xf…

主板声卡坏了会不会有电流声_2020年|短视频直播间设备(手机,直播声卡,麦克风,监听耳机,摄影补光灯)选购推荐指南...

2020年短视频爆发,短视频直播已经成为各大商家争夺市场份额的一把利器,于是各大mcn机构,电商视觉团队,开始搭建直播团队,其中除了直播人员配备,直播设备的选购也是非常重要的一个环节,由于缺乏对器材方面的认知,加上市场上的直播设备纷乱复杂,不知道该如何下手。 我是…

Zabbix5通过脚本自定义Nginx监控

1、客户端配置 1.1、nginx开启nginx status 使用 zabbix 监控 nginx,首先 nginx 需要配置 ngx_status,nginx.conf加入以下配置,并重启Nginx或reload location /ngx_status { stub_status on; access_log off; #allow 127.0.0.1; #deny all…

教大家如何选购直播声卡

随着网络直播的流行,越来越多的人开始加入行列中来,这也促进了对直播设备的需求。.们要知道在直播需要的设备中,只有摄像头和麦克风可以与所有电脑兼容通用,而声卡却不行,声卡分内置声卡和外置声卡。 内置声卡只能用在…

C/C++ 声卡编程代码

事实上,声卡是PC的一种多媒体设备,所以可以用Windows 的MCI(Media Control I nterface)命令来控制声卡。MCI它提供了一组与设备无关的控制命令,是一种访问多媒体设备的高层次方法。也正因为它属于一种高层次方法&#…