【李沐3】3.5、图像分类数据集

news2024/9/28 17:26:40
# %matplotlib inline
# 上述代码是一个注释,用于在Jupyter Notebook等环境中显示Matplotlib绘图的结果在单元格内部显示,而不是弹出新的窗口。

import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l

# 导入必要的库和模块
# - torch:PyTorch库,用于构建和训练神经网络
# - torchvision:PyTorch中用于处理图像数据的库
# - torch.utils.data:PyTorch中用于处理数据加载的模块
# - torchvision.transforms:用于定义和应用数据转换的模块
# - d2l.torch:Dive into Deep Learning(《动手深度学习》)书中提供的PyTorch实用函数和工具

d2l.use_svg_display()
# 设置绘图的显示格式为SVG格式,这可以使绘图在Jupyter Notebook中以矢量图形的形式显示,更清晰和美观。

1、读取数据集

# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式,
# 并除以255使得所有像素的数值均在0〜1之间
trans = transforms.ToTensor()

# 创建FashionMNIST数据集的训练集实例
mnist_train = torchvision.datasets.FashionMNIST(
    root="../data",  # 数据集存放的根目录
    train=True,      # 表示加载训练集
    transform=trans, # 数据变换,将图像数据转换为Tensor格式并归一化
    download=True    # 是否下载数据集(如果尚未下载的话)
)
# 创建FashionMNIST数据集的测试集实例
mnist_test = torchvision.datasets.FashionMNIST(
    root="../data",  # 数据集存放的根目录
    train=False,     # 表示加载测试集
    transform=trans, # 数据变换,将图像数据转换为Tensor格式并归一化
    download=True    # 是否下载数据集(如果尚未下载的话)
)

数据集介绍在这里插入图片描述
那么如何查看数据集中图片大小和通道数呢?以及训练和验证数据多少呢?
在这里插入图片描述

下面代码是将数字标签转换为文本标签

def get_fashion_mnist_labels(labels): #@save
    """
    返回Fashion-MNIST数据集的文本标签
    参数:
        labels: 包含数值标签的列表或数组
    返回:
        包含对应文本标签的列表
    """
    text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
                   'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
    return [text_labels[int(i)] for i in labels]

上面是啥意思呢?就是比如1表示苹果,这里以前标记的是1,现在转换为苹果

下面是可视化

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5): #@save
    """
    绘制图像列表
    参数:
        imgs: 包含图像的列表
        num_rows: 图像展示的行数
        num_cols: 图像展示的列数
        titles: 可选参数,图像标题的列表
        scale: 可选参数,控制图像的缩放比例
    返回:
        无返回值,显示绘制的图像
    """
    # 计算绘图区域的尺寸
    figsize = (num_cols * scale, num_rows * scale)
    # 创建一个具有指定尺寸的子图
    _, 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):
            # 如果图像是PyTorch的张量,将其转换为NumPy数组并在子图上显示
            ax.imshow(img.numpy())
        else:
            # 如果图像是PIL图像,直接在子图上显示
            ax.imshow(img)
        # 隐藏子图的x轴和y轴
        ax.axes.get_xaxis().set_visible(False)
        ax.axes.get_yaxis().set_visible(False)
        if titles:
            # 如果提供了标题列表,设置当前子图的标题
            ax.set_title(titles[i])
    
    # 返回绘制的子图数组
    return axes

2、读取小批量
问:
(1)一个进程通常占用一个核心吗
是的

batch_size = 256
def get_dataloader_workers(): #@save
    """使用4个进程来读取数据"""
    return 4

# 创建训练数据迭代器
train_iter = data.DataLoader(
    mnist_train,                       # 使用的数据集实例
    batch_size,                        # 每个批次的样本数量
    shuffle=True,                      # 是否在每个epoch前打乱数据顺序
    num_workers=get_dataloader_workers() # 用于加载数据的进程数量
)

(2)上面的data在哪里定义的?
看文章开头定义的

3、整合所有组件
就是合成上边所有的代码

def load_data_fashion_mnist(batch_size, resize=None): #@save
    """
    下载Fashion-MNIST数据集,然后将其加载到内存中
    参数:
        batch_size: 批次大小,用于小批量训练
        resize: 可选参数,指定图像调整的大小
    返回:
        包含训练数据迭代器和测试数据集的元组
    """
    # 创建数据变换列表,将图像转换为Tensor格式
    trans = [transforms.ToTensor()]
    
    # 如果提供了resize参数,将图像调整大小添加到变换列表
    if resize:
        trans.insert(0, transforms.Resize(resize))
        
    # 将变换列表组合成一个组合变换
    trans = transforms.Compose(trans)
    
    # 创建FashionMNIST数据集的训练集实例
    mnist_train = torchvision.datasets.FashionMNIST(
        root="../data",              # 数据集存放的根目录
        train=True,                  # 表示加载训练集
        transform=trans,             # 数据变换,包括调整大小和转换为Tensor
        download=True                # 是否下载数据集(如果尚未下载的话)
    )
    
    # 创建FashionMNIST数据集的测试集实例
    mnist_test = torchvision.datasets.FashionMNIST(
        root="../data",              # 数据集存放的根目录
        train=False,                 # 表示加载测试集
        transform=trans,             # 数据变换,包括调整大小和转换为Tensor
        download=True                # 是否下载数据集(如果尚未下载的话)
    )
    
    # 创建训练数据迭代器,并指定批次大小、是否打乱顺序和数据加载进程数量
    train_data = data.DataLoader(
        mnist_train,                 # 使用的训练数据集实例
        batch_size,                  # 每个批次的样本数量
        shuffle=True,                # 是否在每个epoch前打乱数据顺序
        num_workers=get_dataloader_workers()  # 数据加载进程数量
    )
    
    # 创建测试数据迭代器,并指定批次大小、不打乱顺序和数据加载进程数量
    test_data = data.DataLoader(
        mnist_test,                  # 使用的测试数据集实例
        batch_size,                  # 每个批次的样本数量
        shuffle=False,               # 不打乱数据顺序
        num_workers=get_dataloader_workers()  # 数据加载进程数量
    )
    
    # 返回训练数据迭代器和测试数据迭代器的元组
    return train_data, test_data

下面这张图片是对上面的的数据进行调用和,查看数据大小是否改变
在这里插入图片描述

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

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

相关文章

A - Bone Collector(01背包)

Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave … The bone collector had a big bag with a volume of V ,and along his tr…

SpringBoot常用注解-@PathVariable、@RequestParam 、@RequestBody

目录 PathVariable RequestParam RequestBody PathVariable PathVariable 获取url中的数据,绑定路径中的占位符参数到方法参数变量中,get或者post方式都可以,如果URL中无参数,将会出错 例如获取/login/id/name中的id值和name值 …

Pytorch建立MyDataLoader过程详解

简介 torch.utils.data.DataLoader(dataset, batch_size1, shuffleNone, samplerNone, batch_samplerNone, num_workers0, collate_fnNone, pin_memoryFalse, drop_lastFalse, timeout0, worker_init_fnNone, multiprocessing_contextNone, generatorNone, *, prefetch_factorN…

attention is all you need 超参数 私自解读

这几个超参数可变,但是也不能变得太多; 语言本身是复杂的,但可以按照多套语法体系来解剖语言现象,所以超参数是有一定可变的范围; 为什么是6层编码器和解码器呢? 人类的语言可以按照六个层次来组织&#…

Day14-2-NodeJS后端开发流程

Day14-NodeJS后端工程化流程 一 apifox工具 apifox是目前最好的接口调试工具 1 环境搭建 安装登录创建项目接口里面创建对应文件夹在指定的文件夹里面创建接口2 GET请求 1 apifox发送GET请求 2 后端接收GET请求 router.get("/getUserinfo"

拼多多商品详情API接入站点,实时数据json格式示例

作为国内最大的电商平台之一,拼多多数据采集具有多个维度。 有人需要采集商品信息,包括品类、品牌、产品名、价格、销量等字段,以了解商品销售状况、热门商品属性,进行市场扩大和重要决策; 商品数据:拼…

Navicat 蝉联 2023年度 DBTA 读者选择奖的“最佳数据库管理员解决方案”奖项和 DBTA 100 强名单

近日,Database Trends and Applications (简称 DBTA) 颁发的“读者选择奖”获奖名单新鲜出炉,Navicat 蝉联 2023 年度 DBTA 读者选择奖的“最佳数据库管理员(DBA)解决方案”奖项和 DBTA 100 强名单,我们感到无比荣幸和…

自动化编排工具Terraform介绍(一)

Terraform是什么?: Terraform 是 HashiCorp 公司旗下的 Provision Infrastructure 产品, 是 AWS APN Technology Partner 与 AWS DevOps Competency Partner。Terraform 是一个 IT 基础架构自动化编排工具,它的口号是“Write, Plan, and Create …

springMVC 已解密的登录请求

问题描述: 解决方案: 1.对用户所输入的密码在页面进行MD5加密并反馈至密码输入框。 2. 手动生成SSL安全访问证书;在此不做介绍,相关方法可通过网上查找; 3. 将产品HTTP访问方式改为SSL安全访问方式;在Ap…

Fast DDS(1)

1、什么是数据分发服务(DDS): 数据分发服务 (DDS) 是一种以数据为中心的通信协议,用于分布式软件应用程序通信。它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口(API)和通信语义。 由于它是一个以数据为中心的…

java云智慧工地管理平台系统源码

智慧工地将“互联网”的理念和技术引入建筑工地,从施工现场源头抓起,最大程度地收集人员、安全、环境、材料等关键业务数据,依托物联网、互联网,建立云端大数据管理平台,形成“端云大数据”的业务体系和新的管理模式&a…

toLocaleString()方法

toLocaleString() 可以用来格式化,比如数字的格式化, 整数部分每三位加一个逗号 toLocaleString()还可以将数字转换为百分比 如:

印刷企业应该先部署MES管理系统还是ERP系统

在数字化转型的推动下,印刷企业也需要与时俱进,实现信息化和智能化管理。然而,在部署MES生产管理系统和企业ERP系统时,企业需要首先考虑应该先部署哪一个系统。本文将探讨这个问题,并阐述其原因。 一、印刷企业MES管理…

概念解析 | 雷达层析成像:探索隐形世界的新视角

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:雷达层析成像 (Radar Tomography Imaging)。 雷达层析成像:探索隐形世界的新视角 一、背景介绍 自从雷达(Radio Detection and Ranging)发明以来,它已经成为了我们生活…

二、SQL注入之联合查询

文章目录 1、SQL注入原理2、SQL注入的原因3、SQL注入的危害4、SQL注入基础4.1 MySQL相关4.2 SQL注入流程: 5、联合注入实例基本步骤6、总结 1、SQL注入原理 SQL注入(Sql Injection)就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&…

鉴源论坛 · 观模丨形式化方法的工业应用:航空领域

作者 | 徐奕龙飞 上海控安可信软件创新研究院系统建模组 版块 | 鉴源论坛 观模 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 摘 要 本文主要探讨了形式化方法在航空领域中的工业应用。航空领域作为安全攸关领域,其机载系统软件的开发…

【Unity 实用工具篇】✨ | 二维像素角色创作工具 2D Pixel Unit Maker

前言【Unity 实用工具篇 】 | 二维像素角色创作工具 2D Pixel Unit Maker一、介绍1.1 相关链接1.2 效果展示二、快速使用方法2.1 导入插件2.2 打开动画场景,完成初始化2.3 配置自己想要的二维像素角色三、导出角色动画序列帧四、导入新项目使用4.1 切割序列帧动画4.2 配置角色…

jvm-虚拟机栈

1.栈的存储单位 栈是运行时单位,而堆是存储的单位 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储问题,即数据怎么放,放在哪儿 java虚拟机栈 早期也叫java栈,每个线程在创…

电商数据采集和数据分析

不管是做渠道价格的治理,还是做窜货、假货的打击,都需要品牌对线上数据尽数掌握,准确的数据是驱动服务的关键,所以做好电商数据的采集和分析非常重要。 当线上链接较多,品牌又需要监测线上数据时,单靠人工肯…

华为手机怎么录屏?看这里,小白也能学会

“华为手机怎么录屏呀,新买的华为P30,还没怎么用过,今天看直播的时候突然想录屏,却找不到录屏按钮,我记得是有录屏功能的呀,有人会吗?教教我。” 华为手机作为一款领先的智能手机品牌&#xff…