2. DATASETS DATALOADERS

news2025/7/2 20:12:37

2. DATASETS & DATALOADERS

PyTorch提供了两个数据基元:torch.utils.data.DataLoadertorch.uutils.data.data集,允许使用预加载的数据集以及自己的数据。数据集存储样本及其相应的标签,DataLoader在数据集周围包装了一个可迭代项,以便于访问样本。

PyTorch域库提供了许多预加载的数据集(如FashionMNIST),这些数据集是torch.utils.data.Dataset的子类,并实现特定于特定数据的函数。它们可以用于原型和基准测试您的模型。数据集信息如下:图像数据集、文本数据集和音频数据集

2.1 载入数据集

接下来将展示如何通过TorchVision载入Fashion-MNIST数据集。Fashion MNIST是Zalando文章图像的数据集,由60000个训练示例和10000个测试示例组成。每个示例都是一个28x28灰度图像,与10个类中的一个标签相关联。Fashion-MNIST数据集包含了10个类别的图像,分别是:t-shirt(T恤),trouser(牛仔裤),pullover(套衫),dress(裙子),coat(外套),sandal(凉鞋),shirt(衬衫),sneaker(运动鞋),bag(包),ankle boot(短靴)。

我们使用下列参数载入Fashion-MNIST数据集:

  • root是训练\测试数据的存储路径

  • train指定训练或测试数据集

  • download=True表示若root中没有数据,则从互联网下载

  • transformtarget_transform指定功能和标签转换

import torch
from torch.utils.data import Dataset
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plt


training_data = datasets.FashionMNIST(
    root="data",
    train=True,
    download=True,
    transform=ToTensor()
)

test_data = datasets.FashionMNIST(
    root="data",
    train=False,
    download=True,
    transform=ToTensor()
)

2.2 数据集的迭代和可视化

我们可以像列表一样手动索引数据集:training_data[index]。我们使用matplotlib来可视化训练数据中的一些样本。

labels_map = {
    0: "T-Shirt",
    1: "Trouser",
    2: "Pullover",
    3: "Dress",
    4: "Coat",
    5: "Sandal",
    6: "Shirt",
    7: "Sneaker",
    8: "Bag",
    9: "Ankle Boot",
}
figure = plt.figure(figsize=(8, 8))
cols, rows = 3, 3
for i in range(1, cols * rows + 1):
    sample_idx = torch.randint(len(training_data), size=(1,)).item()
    img, label = training_data[sample_idx]
    figure.add_subplot(rows, cols, i)
    plt.title(labels_map[label])
    plt.axis("off")
    plt.imshow(img.squeeze(), cmap="gray")
plt.savefig("figure.jpg")
plt.show()

在这里插入图片描述

2.3 为文件创建自定义数据集

自定义数据集类必须实现三个函数:__init____len____getitem__。FashionMNIST图像存储在变量img_dir中,它们的标签分别存储在CSV文件annotations_file中。
在接下来的部分中,我们将分解这些函数中的每一个函数。

import os
import pandas as pd
from torchvision.io import read_image

class CustomImageDataset(Dataset):
    # __init__函数在实例化数据集对象时运行一次。初始化包含图像、注释文件和这两个转换的目录。
    # labels.csv文件如下所示:
    # tshirt1.jpg, 0
	# tshirt2.jpg, 0
	# ......
	# ankleboot999.jpg, 9
    def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):
        self.img_labels = pd.read_csv(annotations_file)
        self.img_dir = img_dir
        self.transform = transform
        self.target_transform = target_transform
	# __len__函数返回数据集的样本数
    def __len__(self):
        return len(self.img_labels)
	# __getitem__函数从给定索引idx的数据集中加载并返回一个样本。根据索引,它识别图像在磁盘上的位置,使用read_image将其转换为张量,从self.img_labels中的csv数据中检索相应的标签,调用它们上的转换函数(如果适用),并在元组中返回张量图像和相应的标签。
    def __getitem__(self, idx):
        img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])
        image = read_image(img_path)
        label = self.img_labels.iloc[idx, 1]
        if self.transform:
            image = self.transform(image)
        if self.target_transform:
            label = self.target_transform(label)
        return image, label

2.4 为使用DataLoaders进行培训准备数据

数据集检索数据集的特征,并一次标记一个样本。在训练模型时,我们通常希望在“迷你批次”中传递样本,在每个时期重新排列数据以减少模型过拟合,并使用Python的多处理来加快数据检索。
DataLoader是一个可迭代的程序,它用一个简单的API为我们抽象了这种复杂性。

from torch.utils.data import DataLoader

train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)

2.5 遍历DataLoader

我们已经将该数据集加载到DataLoader中,并可以根据需要对数据集进行迭代。下面的每个迭代都返回一批train_featurestrain_labels(分别包含batch_size=64个特征和标签)。因为我们指定了shuffle=True,所以在迭代所有批次之后,数据将被打乱。

# 展示图像和标签
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}")

Feature batch shape: torch.Size([64, 1, 28, 28])
Labels batch shape: torch.Size([64])
Label: 2

在这里插入图片描述

参考资料

  1. https://pytorch.org/tutorials/beginner/basics/data_tutorial.html
  2. https://blog.csdn.net/weixin_45666566/article/details/107812603

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

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

相关文章

Sentinel整合OpenFegin

之前学习了openFeign的使用&#xff0c;我是超链接 现在学习通过Sentinel来进行整合OpenFegin。 引入OpenFegin 我们需要在当前的8084项目中引入对应的依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…

网络套接字编程(一)(UDP)

gitee仓库&#xff1a;https://gitee.com/WangZihao64/linux/tree/master/chat_udp 预备知识 源IP地址和目的IP地址 它是用来标识网络中不同主机的地址。两台主机进行通信时&#xff0c;发送方需要知道自己往哪一台主机发送&#xff0c;这就需要知道接受方主机的的IP地址&am…

【数学建模】利用C语言来实现 太阳赤纬 太阳高度角 太阳方位角 计算和求解分析 树木树冠阴影面积与种植间距的编程计算分析研究

太阳赤纬的计算 #include <stdio.h> #include <math.h>double calculateDelta(int year, int month, int day, int hour, int minute, int second) {int n, n0;double t, theta, delta;// 计算n和n0n month * 30 day;n0 79.6764 0.2422 * (year - 1985) - ((y…

35+大龄程序员从焦虑到收入飙升:我的搞钱副业分享。

37岁大龄程序员&#xff0c;一度觉得自己的职场生涯到头了。既没有晋升和加薪的机会&#xff0c;外面的公司要么接不住我的薪资&#xff0c;要么就是卷得不行&#xff0c;无法兼顾工作和家庭&#xff0c;感觉陷入了死局…… 好在我又重新振作起来&#xff0c;决定用副业和兼职填…

2.3Listbox列表部件

2.3Listbox列表部件 创建主窗口 window tk.Tk() window.title(my window) window.geometry(200x200)创建一个label用于显示 var1 tk.StringVar() #创建变量 l tk.Label(window,bgyellow,width4,textvariablevar1) l.pack()创建一个方法用于按钮的点击事件 def print_s…

DateTimePicker基本用法

作用&#xff1a;日期时间控件&#xff0c;用于手动选择日期与时间。 常用属性&#xff1a; 常用事件&#xff1a; 后台代码示范&#xff1a; //日期变化时获取日期private void dateTimePicker1_ValueChanged(object sender, EventArgs e){textBox2.Text dateTimePicker1.Te…

(原创)适合小白的AI算法学习路线

大家好啊&#xff0c;我是董董灿。 之前写了一篇文章&#xff1a;有前途&#xff01;大模型也需要AI算子开发岗&#xff01;有同学看了之后&#xff0c;在问AI算子开发需要如何学习&#xff0c;有没有学习路线? 当然是有的了。 今天周末在家&#xff0c;就梳理了一下该岗位需…

pdf水印在哪里设置?超实用解决方法分享

在工作中&#xff0c;我们常常需要发送PDF文件给他人&#xff0c;为了保护文件的安全性&#xff0c;防止被他人盗用或篡改&#xff0c;我们通常会给PDF文件添加水印。添加水印可以有效地标识文件的所有权&#xff0c;并增加文件的可追溯性。然而&#xff0c;有许多人不清楚如何…

2023牛客多校第一场B Anticomplementary Triangle

①&#xff1a;有结论&#xff1a;面积最大的三角形即为所求 证明&#xff1a;若有点在面积最大的三角形对应 “ A n t i c o m p l e m e n t a r y T r i a n g l e ” “Anticomplementary Triangle” “AnticomplementaryTriangle”之外&#xff0c;一定能取得更大的面积。…

14款奔驰R400升级ACC自适应巡航系统,解放您双脚

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f;如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全和…

实时监测与报警,探索CMS系统在半导体设备安全管理中的作用

在半导体制造行业&#xff0c;设备的安全管理对于保障生产运行和员工安全至关重要。中央设备状态监控系统CMS&#xff08;central monitoring system&#xff09;是一种关键的解决方案&#xff0c;为企业提供实时监测和报警功能&#xff0c;有效应对设备安全管理的挑战。本文将…

【IDEA2023】解决IDEA中快捷键Alt+Enter不能引入局部变量

1、打开设置 File ➡️ Settings ➡️ Editor ➡️ Intentions 搜索refactorings&#xff0c;将Introduce local variable这个选项勾选上 将Introduce local variable这个选项勾选上 OK&#xff0c;Apply

怎么制作思维导图简单又漂亮?看看这几款常用模板

怎么制作思维导图简单又漂亮&#xff1f;制作思维导图可以帮助我们更好地梳理思路、整理信息。它可以让我们将复杂的信息变得易于理解和记忆&#xff0c;并且可以帮助我们更好地组织各种想法和概念。通过制作思维导图&#xff0c;我们可以更清晰地看到问题的本质&#xff0c;找…

3.Cesium中实体Entity创建(超详细)

前言 在学习 Cesium 的过程中&#xff0c;我发现官方文档冗长且阅读困难&#xff0c;为此我结合官方文档与自己的学习笔记&#xff0c;对其进行归类总结&#xff1b;本文中&#xff0c;我将介绍 Cesium 中创建实体的方法&#xff0c;并对其进行分类&#xff0c;帮助读者快速理解…

【中危】Apache StreamPipes <0.92.0 权限管理不当漏洞

漏洞描述 Apache StreamPipes 是一个开源的数据流处理框架。 Apache StreamPipes 受影响版本中由于 UserResource.java 中的 updateAppearanceMode、registerUser、registerService 函数未对用户身份进行验证&#xff0c;具有登录权限的普通用户可通过 {userId}/appearance/m…

火得不要不要的人工智能,SpringBoot实现人脸识别功能

需求分析 一、人脸注册 step1&#xff1a;人像采集。在注册页面上用html中video组件和js调用笔记本摄像头&#xff0c;并抓取人像图片。没有摄像头的笔记本、台式机的童鞋告辞吧&#xff0c;走好不送。。。 step2&#xff1a;人像上传至项目文件夹。将在页面采集到的人像数据…

TypeScript基础篇 - TS的Helloworld和环境配置

目录 ts-node&#xff08;演示&#xff09; src/hello.ts tsconfig.json(演示) tsconfig.json 小节总结 总结一 总结二 总结三 一张ai生成图 ts-node&#xff08;演示&#xff09; src/hello.ts // : number 【类型的标注】,add(x, y): number// 标注返回值为数字 f…

经验分享:多用户商城开发注意事项

互联网时代&#xff0c;电子商务已经成为了一种常见的购物方式。为了满足用户需求和提供更好的购物体验&#xff0c;越来越多的企业选择开发多用户商城。 什么是多用户商城呢&#xff1f;多用户商城允许多个商家在同一个平台上售卖商品&#xff0c;给用户提供了更大的选择空间和…

【Apifox】国产测试工具雄起

在开发过程中&#xff0c;我们总是避免不了进行接口的测试&#xff0c; 而相比手动敲测试代码&#xff0c;使用测试工具进行测试更为便捷&#xff0c;高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman&#xff0c;他还拥有一个非常nb的功能&#xff0c; 在接…

使用Rational Rose(速成)

Rational Rose 用例图&#xff1a;Use Case Diagram 类图&#xff1a;Class Diagram 对象图&#xff1a;Object Diagram 组件图&#xff1a;Component Diagram 部署图&#xff1a;Deployment Diagram 顺序图&#xff1a;Sequence Diagram 协作图&#xff1a;Collaboration Diag…