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

news2024/11/15 11:43:12

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, transforms

train_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 plt

train_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.coloradmin.cn/o/605714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pybullet学习(一)——安装与入门pybullet

PyBullet介绍 PyBullet 基于著名的开源物理引擎 bullet 开发,封装成了 Python 的一个模块,用于机器人仿真和学习。PyBullet 支持加载 URDF、SDF、MJCF 等多种机器人描述文件,并提供正/逆向运动学、正/逆向动力学、碰撞检测、射线相交查询等功…

FreeRTOS多任务系统

FreeRTOS 文章目录 FreeRTOS1 单任务和多任务系统1.1 单任务系统1.2 多任务系统 2 FreeRTOS 任务状态3 FreeRTOS 任务优先级4 Free RTOS 任务调度方式4.1 抢占式调度4.2 时间片调度 5 FreeRTOS 任务控制块6 FreeRTOS 任务栈 1 单任务和多任务系统 1.1 单任务系统 单任务系统的…

手把手教你搭建网站(零基础,不用写代码)

没有前言直接开始正文,搭建一个博客需要服务器,域名,博客程序。 博客程序常用的有wordpress,z-blog,typecho等等,其中wordpress和z-blog最为简单,typecho需要一定的技术含量,这里暂…

17.4:图的拓扑排序

拓扑序一定是有向无环图。 拓扑排序不唯一 拓扑排序方法一: 利用入度为零进行排序 思路:谁的入度为0,谁就是开始节点,将开始节点打印完之后,将开始节点的直接邻居的入度减1,然后重复。 package algorith…

【软件测试】稳定性和可靠性测试在软件开发中的重要性

软件测试的某些方面经常会在那些刚接触流程的人中造成混淆——例如在稳定性和可靠性测试之间划清界限。 两者通常可以互换使用,并且有一个共同的目标,即确保系统可以在选定的时间范围内稳定运行。 在这篇文章中,我们将仔细研究什么是稳定性测…

10年Java开发,准备去腾讯了~

大家好,最近有不少小伙伴在后台留言,又得准备面试了,不知道从何下手! 不论是跳槽涨薪,还是学习提升!先给自己定一个小目标,然后再朝着目标去努力就完事儿了! 为了帮大家节约时间&a…

chatgpt赋能python:Python分词,助力文本处理和搜索引擎优化

Python分词,助力文本处理和搜索引擎优化 作为一种广泛应用于文本处理的编程语言,Python在分词处理方面也有着得天独厚的优势。Python分词不仅可以帮助我们完成文本处理任务,还能够为搜索引擎优化提供便利。 什么是分词? 分词&a…

集线器与交换机的区别

1.集线器与交换机的区别 笔记来源: 湖科大教书匠:集线器与交换机的区别 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 1.1 集线器 早期总线型以太网的机械连接点不太可靠 使用双绞线和集线器相对可靠 集线器可以在物理层…

计算机网络和因特网概述

一.计算机网络和因特网 计算机网络是指多台计算机通过通信线路或其他连接方式相互连接起来,实现信息交换和共享的系统。而因特网是利用标准化协议互联起来的全球性计算机网络,是计算机网络的一种特殊形式。 1.1 什么是因特网 1.1.1 从具体构成描述 因…

day04——特征处理之特征降维

特征处理之特征降维 一、特征选择Filter(过滤式)1,低方差特征过滤2、相关系数 Embedded (嵌入式) 二、主成分分析(PCA) 特征降维:如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测会影响较大。降维是指在…

设计模式-解释器模式

解释器模式 问题背景解释器模式基本介绍原理类图 使用解释器模式来解决问题UML类图代码示例运行结果 注意事项和细节 问题背景 通过解释器模式来实现一个表达式的加减运算 例如:在我们先输入一个表达式:abc-de,然后输入a,b&#…

layui框架实战案例(22):layui-tab-title的宽度自适应的解决方案

HTML源代码 <div class"layui-card"><div class"layui-card-header">卡片风格</div><div class"layui-card-body"><div class"layui-tab layui-tab-card"><ul class"layui-tab-title">…

酷游SVG-地址路径

说到SVG中最复杂的东西&#xff0c;路径(Path)绝对是一个大魔王&#xff0c;它有太多的commands可以用来定义路径。【娜娜提供酷游地kw9㍠neт地址】透过Path虽然可以绘制效果不错的SVG图形&#xff0c;但是要自己定义一个个坐标点&#xff0c;再去把它们完美的串连在一起&…

《银行从业法律法规》第二章——金融基础知识

第二章 金融基础知识 第二节 货币政策 【 知识点1】 货币政策目标 制定和实施货币政策&#xff0c; 首先必须明确货币政策最终要达到的目的&#xff0c; 即货币政策的最终目标。中央银行通过货币政策工具操作直接引起操作目标的变动&#xff0c;操作目标的变动又通过一定的途…

libarchive 如何在Ubuntu中进行安装

简介 libarchive是一个开源的压缩和归档库。 它支持实时访问多种压缩文件格式&#xff0c;比如7z、zip、cpio、pax、rar、cab、uuencode等&#xff0c;因此应用十分广泛。 举个例子&#xff0c;我写了一段代码&#xff0c;想要解压一个压缩包&#xff0c;那我就得 fork 一个 …

python制作简单版天天酷跑,是不是你平日里摸鱼小游戏呀

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 天天酷跑是一款轻松好玩、简单时尚的跑酷类手机游戏。 那我们能不能用python模拟出这个一个游戏呢&#xff1f; 答案当然是可以的&#xff0c;今天我就给大家带来简易版的天天酷跑小游戏 开发环境&#xff1a; 版 本&a…

如何用Python写个网页爬取程序

如何用Python写个网页爬取程序 准备开发工具安装PythonPython安装pipPip安装爬取插件准备好网页地址代码实现 准备开发工具 额&#xff0c;作者用的是vscode。具体怎么安装自行百度哈&#xff0c;这个都不会建议就不要学爬取了。 不忍心藏着也&#xff0c;给你个方法吧 vsc…

2023年第六届广西大学生程序设计竞赛(热身赛)题解

题目均来自去年的省赛原题 参考资料 知乎&#xff1a;第五届GXCPC广西大学生程序设计竞赛 部分题解&#xff08;无CDK&#xff09; A题送分题&#xff0c;跳过 B 位运算lowbit函数 题目大意&#xff1a; 对一个数&#xff08;二进制&#xff09;进行操作&#xff0c;询问使其…

C++11/C++14中constexpr的使用

常量表达式(const expression)是指值不会改变并且在编译过程中就能得到计算结果的表达式。字面值属于常量表达式&#xff0c;用常量表达式初始化的const对象也是常量表达式。 只要有可能使用constexpr&#xff0c;就使用它。 C11中constexpr的使用&#xff1a; constexpr是C11中…

MKS SERVO4257D 闭环步进电机_系列7 MODBUS-RTU通讯示例

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&a…