pytorch升级打怪(三)

数据集合数据加载器

  • 简介
  • 加载数据集
  • 迭代和可视化数据集
  • 为您的文件创建自定义数据集
    • ```__init__```
    • ```__len__```
    • ```__getitem__```
  • 准备您的数据以使用DataLoaders进行训练
  • 通过DataLoader进行遍载

简介

处理数据样本的代码可能会变得混乱且难以维护;理想情况下,我们希望我们的数据集代码与模型训练代码解耦,以提高可读性和模块化。PyTorch提供了两个数据原语:torch.utils.data.DataLoader和torch.utils.data.Dataset,允许您使用预加载的数据集以及您自己的数据。Dataset存储样本及其相应的标签,DataLoader在Dataset周围包装一个可以可以方便地访问样本。

PyTorch域库提供一些预加载的数据集(如FashionMNIST),该子类为torch.utils.data.Dataset,并实现特定于特定数据的功能。它们可用于原型和基准测试您的模型。您可以在这里找到它们:图像数据集、文本数据集和音频数据集

加载数据集

以下是如何从TorchVision加载Fashion-MNIST数据集的示例。Fashion-MNIST是Zalando文章图像的数据集,包括60,000个训练示例和10,000个测试示例。每个示例都包括一个28×28的灰度图像和来自10个班级之一的相关标签。

我们用以下参数加载FashionMNIST数据集:

  • root是存储火车/测试数据的路径,
  • train指定训练或测试数据集,
  • download=True如果root上没有数据,则从互联网上下载数据。
  • transform和target_transform指定功能和标签转换

import torch
from torch.utils.data import Dataset
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plttraining_data = datasets.FashionMNIST(root="data",train=True,download=True,transform=ToTensor()
)test_data = datasets.FashionMNIST(root="data",train=False,download=True,transform=ToTensor()
)

Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz
Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz to data/FashionMNIST/raw/train-images-idx3-ubyte.gz0%|          | 0/26421880 [00:00<?, ?it/s]0%|          | 65536/26421880 [00:00<01:12, 363720.69it/s]1%|          | 229376/26421880 [00:00<00:38, 682917.83it/s]3%|3         | 917504/26421880 [00:00<00:12, 2109774.93it/s]12%|#2        | 3211264/26421880 [00:00<00:03, 6286038.17it/s]28%|##8       | 7438336/26421880 [00:00<00:01, 14838321.45it/s]41%|####      | 10747904/26421880 [00:00<00:00, 16477772.21it/s]57%|#####7    | 15138816/26421880 [00:01<00:00, 22904288.96it/s]71%|#######   | 18644992/26421880 [00:01<00:00, 21979092.87it/s]92%|#########2| 24346624/26421880 [00:01<00:00, 30077676.52it/s]
100%|##########| 26421880/26421880 [00:01<00:00, 18141478.99it/s]
Extracting data/FashionMNIST/raw/train-images-idx3-ubyte.gz to data/FashionMNIST/rawDownloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz
Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz to data/FashionMNIST/raw/train-labels-idx1-ubyte.gz0%|          | 0/29515 [00:00<?, ?it/s]
100%|##########| 29515/29515 [00:00<00:00, 327742.46it/s]
Extracting data/FashionMNIST/raw/train-labels-idx1-ubyte.gz to data/FashionMNIST/rawDownloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz
Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz to data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz0%|          | 0/4422102 [00:00<?, ?it/s]1%|1         | 65536/4422102 [00:00<00:11, 363330.31it/s]5%|5         | 229376/4422102 [00:00<00:06, 684189.84it/s]21%|##1       | 950272/4422102 [00:00<00:01, 2195763.19it/s]87%|########6 | 3833856/4422102 [00:00<00:00, 7634326.84it/s]
100%|##########| 4422102/4422102 [00:00<00:00, 6105857.14it/s]
Extracting data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz to data/FashionMNIST/rawDownloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz
Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz0%|          | 0/5148 [00:00<?, ?it/s]
100%|##########| 5148/5148 [00:00<00:00, 37228063.78it/s]
Extracting data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw

迭代和可视化数据集

我们可以像列表一样手动索引Datasets: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.show()

在这里插入图片描述

为您的文件创建自定义数据集

自定义数据集类必须实现三个函数:

__init__、__len__和__getitem__

。看看这个实现;FashionMNIST图像存储在目录img_dir中,其标签单独存储在CSV文件annotations_file。

在接下来的章节中,我们将分解每个函数中发生的事情。


import os
import pandas as pd
from torchvision.io import read_imageclass CustomImageDataset(Dataset):def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):self.img_labels = pd.read_csv(annotations_file)self.img_dir = img_dirself.transform = transformself.target_transform = target_transformdef __len__(self):return len(self.img_labels)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

__init__

实例化数据集对象时,__init__函数运行一次。我们初始化包含图像、注释文件和两个转换的目录(下一节将更详细地介绍)。


def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):self.img_labels = pd.read_csv(annotations_file)self.img_dir = img_dirself.transform = transformself.target_transform = target_transform

__len__

__len__函数返回我们数据集中的样本数。


def __len__(self):return len(self.img_labels)

__getitem__

__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

准备您的数据以使用DataLoaders进行训练

Dataset检索我们数据集的功能,并一次标记一个样本。在训练模型时,我们通常希望以“迷你批次”传递样本,在每个时代重新洗牌数据以减少模型过拟合,并使用Pythonmultiprocessing来加快数据检索速度。

DataLoader是一个可以在一个简单的API中为我们抽象这种复杂性的可以进行的。

from torch.utils.data import DataLoadertrain_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)

通过DataLoader进行遍载

我们已经将该数据集加载到DataLoader,可以根据需要迭代数据集。下面的每个迭代都会返回一批train_features和train_labels(分别包含batch_size=64特征和标签)。因为我们指定了shuffle=True,在我们遍复所有批次后,数据被洗牌(为了更精细地控制数据加载顺序,请查看采样器)。


# Display 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}")

在这里插入图片描述

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

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

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

相关文章

4种小众的能力,帮你更好地适应未来

新年伊始&#xff0c;又是一个全新的开始。 未来的社会究竟需要什么样的能力&#xff1f;这已经是一个很老的话题&#xff0c;已经有许许多多讨论了。但这其中&#xff0c;可能有一些是容易被人忽略的&#xff0c;或者不容易被注意到的。 我想跟你一起分享&#xff0c;我对这个…

高分1、2号卫星原始遥感影像数据

高分一号 高分一号卫高分一号卫星是中国高分辨率对地观测系统的首发星&#xff0c;突破了高空间分辨率、多光谱与宽覆盖相结合的光学遥感等关键技术&#xff0c;设计寿命5至8年。 高分辨率对地观测系统工程是《国家中长期科学和技术发展规划纲要(2006&#xff5e;2020年)》确定…

vue学习笔记25-组件数据传递透传Attribute

组件数据传递 之前学的 props:父传子 自定义事件&#xff1a;子传父 props可以实现子传父&#xff0c;因为props传递数据不限制类型&#xff0c;当然也可以传函数&#xff0c;而我们可以利用函数互相携带参数实现子传父&#xff08;传一个回调函数&#xff0c;emit的底层原…

MongoDB实战面试指南:常见问题一网打尽

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! MongoDB是一款流行的非关系型数据库&#xff0c;以其高效、可扩展的特性受到开发者的青睐。了解MongoDB的架构、存储引擎和数据结…

精酿啤酒:煮沸、发酵与成熟的过程解析

在啤酒酿造过程中&#xff0c;煮沸、发酵与成熟是重要的环节&#xff0c;它们对啤酒的口感、香气和品质具有决定性的影响。下面将详细解析Fendi Club啤酒在煮沸、发酵与成熟过程中的关键步骤和与众不同之处。 煮沸是啤酒酿造过程中的一个重要环节。在这一步骤中&#xff0c;麦汁…

Mac电脑搭建前端项目环境,并适配老项目

1.上一篇文章中&#xff0c;我说到了&#xff0c;node.js中文网下载node 包&#xff0c;根据系统进行选择&#xff0c;然后安装包node即可&#xff0c;对于比较新的项目确实也是适用的&#xff0c;但是老项目就不行了会报错&#xff0c;node版本过高&#xff0c;导致环境不匹配…

基于数据库的全文检索实现

对于内容摘要&#xff0c;信件内容进行全文检索 基于SpringBoot 2.5.6Postgresqljpahibernate实现 依赖 <spring-boot.version>2.5.6</spring-boot.version> <hibernate-types-52.version>2.14.0</hibernate-types-52.version><dependency><…

手机备忘录怎么导出到电脑,如何将手机备忘录导出到电脑

备忘录是我们日常生活和工作中常用的工具之一&#xff0c;我们可以在手机上轻松地记录重要的事务、想法和灵感。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将手机备忘录导出到电脑进行更详细的整理和管理。那么&#xff0c;手机备忘录怎么导出到电脑&#xff0c;如…

Python 3.6.6安装方法(保留环境中python2不受影响)

前言&#xff1a;因为Linux系统下自带了python2的版本&#xff0c;所以我们要用Python3的话需要自己构建安装。并保证某些已经存在的服务可以正常使用python2。 具体步骤如下&#xff1a; 一、python3.6.6 安装 1.安装依赖包&#xff1a; yum -y install zlib zlib-devel yu…

【unity与android的交互(一)】安卓打包相关的常见参数详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

2023 PWNHUB 3月赛-【sh_v1_1】(cp ln unsorted bin 与main_arena的偏移 思路 exp)

文章目录 无关干扰cplnunsorted bin 与main_arena的偏移思路exp 无关干扰 这段代码总是重复&#xff0c;但没啥用&#xff0c;我们可以将全部代码复制到vscode后然后将这些部分全部去除掉 if ( dword_A010 > dword_A014 )dword_A018 ^ dword_A020;if ( dword_A010 < dw…

python疑难杂症(12)---生成器、迭代器的基本概念、以及他们之间的关系区别

Python的迭代器和生成器是其量大特色法器&#xff0c;常常用于简化代码、降低数据占用内存提高运行速度上&#xff0c;学会这两件法器&#xff0c;使用Python语言也可以猪鼻子插大葱了。 1、迭代器 在Python中&#xff0c;迭代器是要求支持迭代器协议的对象&#xff0c;而支持…