Mnist手写体数字数据集介绍与在Pytorch中使用

1.介绍

        MNIST(Modified National Institute of Standards and Technology)数据集是一个广泛用于机器学习和计算机视觉研究的常用数据集之一。它由手写数字图像组成,包括0到9的数字,每张图像都是28x28像素的灰度图像,图片和标签均采用二进制编码,共70000张图像,其中包括60000张训练集和10000测试集。每张图像都对应一个one-hot标签,表示图像中显示的是哪个数字

        这个数据集因其相对较小的规模和简单的图像内容也成为了许多机器学习入门教程和示例的标准数据集,因为它的简单性和普遍性,使得学习者能够快速开始构建和训练模型,从而更好地理解机器学习的基本概念和流程,可以说它就是计算机视觉的“Hello World”。

        官网地址https://yann.lecun.com/exdb/mnist/

2.在Pytorch中使用Mnist

        Pytorch的torchvision中的datasets自带下载与读取Mnist数据集的函数,可以很方便的使用

1.导入所需库

import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import matplotlib.pyplot as plt

 2.下载Mnist数据集

# 定义数据转换
transform = transforms.Compose([transforms.ToTensor()  # 将图像转换为 PyTorch 张量
])# 下载并加载 MNIST 训练和测试数据集
train_dataset = datasets.MNIST(root='./dataset', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./dataset', train=False, download=True, transform=transform)
  • root为数据集保存的位置
  • train为是否为训练集
  • download为是否自动下载该数据集,如果数据集已经下载过,即使设置为True也没关系,他会自动检测
  • transform为数据转换的操作,ToTensor()是必须的

        这里如果不使用科学上网可能无法下载,或者下载有点慢。而直接去官网的话又需要登陆

                        

        这里另外一个介绍使用迅雷下载数据集的方法,不止适用于这个数据集,我们复制好链接后打开迅雷就会自动弹出下载界面

数据集文件名下载地址
训练集图像train-images-idx3-ubyte.gzhttp://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
训练集标签train-labels-idx1-ubyte.gzhttp://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz

测试集图像

t10k-images-idx3-ubyte.gzhttp://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
测试集标签t10k-labels-idx1-ubyte.gzhttp://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz

                        

         没有弹出的话就把链接复制到搜索框

        下载好后,在root参数指定的位置下新建一个MNIST文件夹,再在MNIST中新建一个raw文件夹,对于其他数据集不知道如何建文件夹可以先尝试自动下载,他会建好文件夹,然后把下载好的四个压缩包直接放进去就可以

        

接着我们再运行一次上面的代码,他会检测到数据集已存在,然后自动解压缩,这样就完成了

 3.读取数据集与展示

        使用dataloader将数据分为一个个批量大小的数据,生成一个迭代器,shuffle为是否洗牌

# 创建数据加载器以批量加载数据
batch_size = 128
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
# 输出训练集和测试集的长度
train_length = len(train_dataset)
test_length = len(test_dataset)
print(f"训练集的长度:{train_length}")
print(f"测试集的长度:{test_length}")

# 创建一个字典以存储类别索引及其对应的图像
images_by_class = {}# 填充字典,每个类别只保留几张图像
num_images_per_class = 5# 循环遍历训练集中的每个图像和对应的标签
for image, label in train_dataset:# 如果当前标签不在字典中,为该标签创建一个空列表if label not in images_by_class:images_by_class[label] = []# 如果当前类别的图像数量未达到指定的数量(num_images_per_class),则将当前图像添加到对应类别的列表中if len(images_by_class[label]) < num_images_per_class:images_by_class[label].append(image)# 显示每个类别的图像
for label, images in images_by_class.items():print(f"Class {label}:")# 创建一个新的图像窗口,并设置大小plt.figure(figsize=(num_images_per_class * 2, 2))# 遍历每个类别的图像列表并显示for i in range(num_images_per_class):plt.subplot(1, num_images_per_class, i + 1)# 显示图像,并使用灰度颜色图plt.imshow(images[i].squeeze(), cmap='gray')plt.axis('off')  # 不显示坐标轴plt.show()  # 显示图像

        然后使用for循环就可以一次读取一个批量的数据,进行后面的一系列任务,这里只是展示一个批次数据

# 读取一个批次的数据
for i, (images, labels) in enumerate(train_loader):print("第{}批次".format(i+1))print(images.shape)  # 图像批次的形状 (batch_size, 通道数, 高度, 宽度)print(labels.shape)  # 标签批次的形状 (batch_size,)break   

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle文件自动“减肥”记

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

vite + vue3引入ant design vue 报错

npm install ant-design-vue --save下载插件并在main.ts 全局引入 报错 解决办法一&#xff1a; main.ts注释掉全局引入 模块按需引入 解决办法二 将package.json中的ant-design-vue的版本^4.0.0-rc.4改为 ^3.2.15版本 同时将将package-lock.json中的ant-design-vue的版本…

stable diffusion 人物高级提示词(二)衣物、身材

一、衣服大类 英文中文Shirt衬衫Blouse女式衬衫Dress连衣裙Skirt裙子Pants裤子Jeans牛仔裤Swimsuit泳衣Underwear内衣Bra文胸Panties内裤Stockings长筒袜Shoes鞋子Socks袜子 二、细分分类 dress 是连衣裙&#xff1a; 英文解释Formal Dress正式礼服&#xff0c;通常用于正式…

Mac解决node-sass: Command failed 问题

1.以为Command failed 错误是因为缺少依赖项或者版本不兼容导致的&#xff08;不适用我&#xff09; 此项目的package版本&#xff0c;node版本14.21.3为版本对应正确 "node-sass": "^4.13.0","sass": "^1.24.2","sass-loader&q…

计算机组成原理 总线

总线 总线定义 总线 总线是一组能为多个部件分时共享的公共信息传送线路 总线的好处 早期计算机外部设备少时大多采用分散连接方式&#xff0c;不易实现随时增减外部设备 为了更好地解决I/O设备和主机之间连接的灵活性问题&#xff0c;计算机的结构从分散连接发展为总线连接 …

【demoSURF】室内定位(图像匹配)基础代码实现,包含所有可以出现问题的解法

代码如下 import numpy as np import cv2 from matplotlib import pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号img1 cv2.imread("D:/data/North/0007.JPG",0) i…

在云服务器ECS上用Python写一个搜索引擎

在云服务器ECS上用Python写一个搜索引擎 一、场景介绍二、搜索引擎的组成2.1 网页的爬取及排序2.2 用户使用搜索引擎进行搜索 三、操作步骤3.1 环境准备3.2 安装Anaconda3.3 安装Streamlit3.4 下载搜索引擎代码3.5 运行搜索引擎 四、常见问题4.1 运行setup.py时可能的问题4.2 如…

Vue2 - computed 和 method 的原理区别

目录 1&#xff0c;简单对比2&#xff0c;原理的不同1&#xff0c;method 的处理2&#xff0c;computed 的处理实现缓存触发更新 3&#xff0c;触发更新时的问题 1&#xff0c;简单对比 computed 当做属性使用&#xff0c;method 当做方法使用。computed 可以提供 getter 和 s…

一文读懂 $mash 通证 “Fair Launch” 规则(幸运池玩法解读篇)

Solmash是Solana生态中由社区主导的铭文资产LaunchPad平台&#xff0c;该平台旨在为Solana原生铭文项目&#xff0c;以及通过其合作伙伴SoBit跨链桥桥接到Solana的Bitcoin生态铭文项目提供更广泛的启动机会。有了Solmash&#xff0c;将会有更多的Solana生态的铭文项目、资产通过…

MediaPipeUnityPlugin Win10环境搭建(22年3月的记录,新版本已完全不同,这里只做记录)

https://github.com/homuler/MediaPipeUnityPlugin You cannot build libraries for Android with the following steps. 1、安装msys2配置系统环境变量Path添加 C:\msys64\usr\bin 执行 pacman -Su 执行 pacman -S git patch unzip 2、安装Python3.9.10 勾选系统环境变量 …

提升图像分割精度:学习UNet++算法

文章目录 一、UNet 算法简介1.1 什么是 UNet 算法1.2 UNet 的优缺点1.3 UNet 在图像分割领域的应用 二、准备工作2.1 Python 环境配置2.2 相关库的安装 三、数据处理3.1 数据的获取与预处理3.2 数据的可视化与分析 四、网络结构4.1 UNet 的网络结构4.2 UNet 各层的作用 五、训练…

【开源】轻松实现车牌检测与识别:yolov8+paddleocr【python源码+数据集】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…