9.图片分类数据集

article/2025/11/7 15:34:02

1. 图像分类数据集

MNIST数据集 [LeCun et al., 1998] 是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集。

%matplotlib inline
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2ld2l.use_svg_display()

2. 读取数据集

通过框架中的内置函数将Fashion-MNIST数据集下载并读取到内存中

# 通过ToTensor 实例将图像数据从PIL类型变换成32位浮点数格式
# 并除以255使得所有像素的数值均在0~1之间trans = transforms.ToTensor()  # 把图片转成pytorch的tensor,做一个简单的预处理# 从torchvision.datasets中把FashionMNIST拿到,下载到上一级目录的data下面
# train = True 表示的是:下载的是训练数据集
# transform=trans 表示数据集拿出来之后,要得到的是pytorch的tensor,而不是一堆图片
# download=True 默认从网上下载,如果不方便的话,可以事先下载好存在data文件夹下面
mnist_train = torchvision.datasets.FashionMNIST(root="./data",train = True,transform=trans,download=True)
# 测试数据集,用来验证模型好坏的数据集,不参与训练
mnist_test = torchvision.datasets.FashionMNIST(root="./data",train=False,transform=trans,download=True)len(mnist_train),len(mnist_test)

下载成功会显示:

在这里插入图片描述
读取第一张图片:

# mnist_train[i][0]表示第i个样本的图片信息,mnist_train[i][1]表示第i个样本的标签值
mnist_train[0][0].shape # 第一张图片的形状,是一个黑白图片
# rgb的channel数=1,单通道,长和宽都是28

在这里插入图片描述

Fashion-MNIST中包含的10个类别,分别为t-shirt(T恤)、trouser(裤子)、pullover(套衫)、dress(连衣裙)、coat(外套)、sandal(凉鞋)、shirt(衬衫)、sneaker(运动鞋)、bag(包)和ankle boot(短靴)。 以下函数用于在数字标签索引及其文本名称之间进行转换。

def get_fashion_mnist_labels(labels):'''返回Fashion-MNIST数据集的文本标签'''text_labels = ['t-shirt','trouser','pullover','dress','coat','sandal','shirt', 'sneaker', 'bag', 'ankle boot']return [text_balels[int(i)] for i in labels]

创建一个函数来可视化这些样本:

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):  #@save"""绘制图像列表"""# 设置图片大小figsize = (num_cols * scale, num_rows * scale) # tuple类型# _表示忽略不使用的变量,即fig_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)axes = axes.flatten()for i, (ax, img) in enumerate(zip(axes, imgs)):if torch.is_tensor(img):# 图片张量ax.imshow(img.numpy())else:# PIL图片ax.imshow(img)# 取消横纵坐标上的刻度ax.axes.get_xaxis().set_visible(False)ax.axes.get_yaxis().set_visible(False)if titles:# 设置标题ax.set_title(titles[i])return axes

以下是训练数据集中前几个样本的图像及其相应的标签.

# 通过DataLoader函数从训练数据集中拿到第一个小批量,批量大小为18的数据
X,y = next(iter(data.DataLoader(mnist_train,batch_size=18)))
show_images(X.reshape(18,28,28),2,9,titles=get_fashion_mnist_labels(y))

在这里插入图片描述

3. 读取小批量

batch_size = 256# 每一次读取数据不容易,需要使用多个进程来进行数据的读取,操作以及预读取
def get_dataloader_workers():'''使用4个进程来读取的数据'''return 4train_iter = data.DataLoader(mnist_train,batch_size,shuffle = True,num_workers = get_dataloader_workers())timer = d2l.Timer() # 定义Timer函数来测试速度
for X,y in train_iter:continue
f'{timer.stop():.2f} sec'

运行结果如下,可以看到扫一遍数据要4.25秒:
在这里插入图片描述

有时候会碰到模型训练很快,但是数据读不过来,通常来说,会在训练之前,去看一下数据读取多快。读取数据的时间至少要比训练要快一些

4. 整合所有的组件

把所有的之前的函数放在一个函数里面,使得之后能够重用。

定义load_data_fashion_mnist函数,用于获取和读取Fashion-MNIST数据集。 这个函数返回训练集和验证集的数据迭代器。 此外,这个函数还接受一个可选参数resize,用来将图像大小调整为另一种形状。

def load_data_fashion_mnist(batch_size, resize=None):  #@save"""下载Fashion-MNIST数据集,然后将其加载到内存中"""trans = [transforms.ToTensor()]if resize:trans.insert(0, transforms.Resize(resize))trans = transforms.Compose(trans)mnist_train = torchvision.datasets.FashionMNIST(root="../data", train=True, transform=trans, download=True)mnist_test = torchvision.datasets.FashionMNIST(root="../data", train=False, transform=trans, download=True)return (data.DataLoader(mnist_train, batch_size, shuffle=True,num_workers=get_dataloader_workers()),data.DataLoader(mnist_test, batch_size, shuffle=False,num_workers=get_dataloader_workers()))

下面,我们通过指定resize参数来测试load_data_fashion_mnist函数的图像大小调整功能:

train_iter, test_iter = load_data_fashion_mnist(32, resize=64)
for X, y in train_iter:print(X.shape, X.dtype, y.shape, y.dtype)break

在这里插入图片描述

现在已经准备好使用Fashion-MNIST数据集,便于下面的章节调用来评估各种分类算法。


http://chatgpt.dhexx.cn/article/QPrc80l6.shtml

相关文章

CNN实现花卉图片分类识别

CNN实现花卉图片分 前言 本文为一个利用卷积神经网络实现花卉分类的项目,因此不会过多介绍卷积神经网络的基本知识。此项目建立在了解卷积神经网络进行图像分类的原理上进行的。 项目简介 本项目为一个图像识别项目,基于tensorflow,利用C…

常用图像分类网络

想对图像分类网络写个简要的概括,如有介绍不当之处,还望指出。 一、VGG网络 更新于2018年10月20日 参考博客:深度学习经典卷积神经网络之VGGNet 论文地址:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITIO…

干货——图像分类(上)

这是译自斯坦福CS231n课程笔记image classification notes,由课程教师Andrej Karpathy授权进行翻译。本篇教程由杜客翻译完成。非常感谢那些无偿奉献的大师,在此代表所有爱好学习者向您们致敬,谢谢! 这是斯坦福大学的课程&#xf…

图像分类

图像物体分类与检测算法综述 转自《计算机学报》 目录 图像物体分类与检测算法综述 目录图像物体分类与检测概述物体分类与检测的难点与挑战物体分类与检测数据库物体分类与检测发展历程 图像物体分类与检测是计算机视觉研究中的两个重要的基本问题,也是图像分割、…

【图像分类数据集】非常全面实用的垃圾分类图片数据集共享

【图像分类数据集】非常全面实用的垃圾分类图片数据集共享 数据集介绍: 训练集 文件夹结构如下(部分: 第0类文件夹下数据展示如下(部分: 测试集 大致如下: 数据集获取方式: 总结&#xf…

python学习(18)--图片分类

图片分类 学习动机. 在这一节中我们会引入图片分类为题。这也是从一个合适的集合中分配给图片一个标记的任务。这是计算机视觉的核心问题之一。鉴于它的简单性,有一大批实用应用。更多的是,我们可以在以后的章节中看到,一些看似分离的计算机…

【OpenMMLab】图片分类发展简史

一、发展简述 图片分类是CV领域的基础任务,也是检测、分割、追踪等任务的基石。简而言之,图片分类就是给定一张图片,判断其类别,一般而言所有的候选类别是预设的。 从数学上描述,图片分类就是寻找一个函数&#xff0…

深度学习(1) ——图像分类

图像分类概述 图像分类实质上就是从给定的类别集合中为图像分配对应标签的任务,当我们输入一张图片,返回一个该图像类别的标签。限制条件:只能输入单目标图像。常用数据集:mnist、CIFAR-10、CIFAR-100、ImageNet 图像分类算法 …

CNN图片分类(Pytorch)

这篇文章主要讲述用 pytorch 完成简单 CNN 图片分类任务,如果想对 CNN 的理论知识进行了解,可以看我的这篇文章,深度学习(一)——CNN卷积神经网络。 图片分类 我们以美食图片分类为例,有testing、training、validation文件夹。下…

JavaWeb学习思维导图

这是我最近总结的JavaWeb学习思维导图,希望可以帮到大家:

javaweb学习总结

重定向 请求转发 区别:重定向后浏览器地址值会发生改变。 重定向request域对象不能共享数据,因为request域的范围是一次请求一次响应。而转发能够共享数据 请求转发的路径写法,只是需要写url-pattern的地址即可,不用带项目名&am…

JavaWeb学习心得总结

JavaWeb(JSPServlet)新手学习心得总结 说明: 由于篇幅的原因,本文只是对于JavaWeb项目的大致数据流程做一个介绍,同时引出一些JavaWeb开发中很基础的知识点,且不会精确到具体代码实现。 所以本文的适合读…

JavaWeb学习笔记总结(一)

前言:因为我是大三,这学期开课是JavaWeb,前端三剑客htmlcssjs,还有一个springboot框架的课,大二下学期才学的java跟sql,所以跨度直接到springboot有点大吧,ssm框架都没学,但是b站上有挺多教程的&#xff0c…

一.JavaWeb学习路线

Java系统学习路线: 第一阶段 第一阶段: Java 基础,包括 Java 语法,面向对象特征,常见API,集合框架。(基础) 第二阶段:Java API:输入输出,多线程,网络编程,反…

java web学习_JavaWeb学习路线

Java web,是用Java技术来解决相关web互联网领域的技术综合。Web包括:web服务器和web客户端。Java在客户端的应用有Java applet,不过使用很少。Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。java技…

JavaWeb学习笔记

JavaWeb 1.ASP、PHP、JSP ASP: 微软&#xff1a;最早流行的就行ASP 在HTML嵌入VB的脚本 在ASP中&#xff0c;基本一个界面就有几千行代码&#xff0c;页面极其混乱&#xff0c;维护成本高 c#编程语言 IIS服务器 <h1> <% system.out.println("hello") …

javaweb学习路线

一、学习顺序 1、java语法&#xff0c;语法很重要&#xff0c;没有这个根本后面的也进行不下去&#xff0c;建议先学会应用了再去研究jdk源码&#xff0c;本身就是新手就想从原理开始了解&#xff0c;估计非常吃力&#xff0c;效果也不一定好。 2、数据库&#xff0c;首先学关…

JavaWeb知识点汇总

JavaWeb知识点汇总 前言&#xff1a;跟了狂神javaweb学习有一阵子了&#xff0c;这里简单进行笔记总结&#xff0c;也是第一次使用markdown写这么长的文章&#xff0c;虽然是跟着敲的&#xff0c;也是多理解了一遍&#xff0c;以及具体上手自己写的代码和相应效果图。发布于此…

JAVAweb入门基础

1、JAVAweb开发原理 2、web服务器 2.1、技术服务 ASP&#xff08;微软 国内最早流行;在HTML中嵌入了VB的脚本&#xff0c;ASPCom;在ASp开发中&#xff0c;基本一个页面都有几千行的业务代码&#xff0c;页面及其混乱&#xff1b;维护成本高&#xff01;&#xff09; PHP(PHP…

JavaWeb学习知识总结

1.自定义 servlet 的三种方式&#xff0c;及区别? 方式一&#xff1a;编写一个类去实现Servlet接口(必须重写Servlet接口里面所有的抽象方法)方式二&#xff1a;编写一个类去继承GenericServlet抽象类(重写生命周期的service方法&#xff08;抽象法&#xff09;)GenericServle…