【Pytorch】torch.utils.data模块

        torch.utils.data模块主要用于进行数据集处理,是常用的一个包。在构建数据集的过程中经常会用到。要使用data函数必须先导入:

from torch.utils import data

       下面介绍几个经常使用到的类。   

torch.utils.data.DataLoader

DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,batch_sampler=None, num_workers=0, collate_fn=None,pin_memory=False, drop_last=False, timeout=0,worker_init_fn=None, *, prefetch_factor=2,persistent_workers=False)

        DataLoader构造函数最重要的参数是 dataset,它指示要从中加载数据的数据集对象。PyTorch 支持两种不同类型的数据集——映射式数据集和可迭代式数据集。

        映射式数据集是Dataset 子类的实例,它实现了 __getitem__() 和 __len__() 协议,它表示从索引/键值到数据样本的映射。例如,当使用 dataset[idx] 访问此类数据集时,它可以从磁盘上的文件夹中读取第 idx 幅图像及其对应的标签。

        可迭代式数据集是IterableDataset 子类的实例,它实现了 __iter__() 协议,并表示数据样本上的可迭代对象。这种类型的数据集特别适合随机读取代价高昂甚至不可能的情况,以及批大小取决于获取的数据的情况。例如,当调用 iter(dataset) 时,此类数据集可以返回从数据库、远程服务器甚至实时生成的日志中读取的数据流。

torch.utils.data.Dataset

        表示一个Dataset的抽象类。所有表示键到数据样本映射的数据集都应该继承它。所有子类都应该重写__getitem__(),支持为给定键获取数据样本。子类还可以选择性地重写__len__(),许多Sampler实现和DataLoader的默认选项都期望它返回数据集的大小。子类还可以选择性地实现__getitems__(),以加速批量样本加载。此方法接受批量样本索引列表并返回样本列表。

代码运用示例:

import torch
from torch.utils.data import Dataset, DataLoader# 自定义数据集
class SimpleDataset(Dataset):def __init__(self, data, labels):"""Args:data (list or tensor): 输入数据labels (list or tensor): 数据对应的标签"""self.data = torch.tensor(data, dtype=torch.float32)  # 转为张量self.labels = torch.tensor(labels, dtype=torch.long)  # 转为张量def __len__(self):"""返回数据集的大小"""return len(self.data)def __getitem__(self, idx):"""根据索引返回一个样本"""return self.data[idx], self.labels[idx]# 创建数据和标签
data = [1, 2, 3, 4, 5]
labels = [0, 1, 0, 1, 0]# 实例化数据集
dataset = SimpleDataset(data, labels)# 用 DataLoader 加载数据
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)# 遍历 DataLoader
for batch_data, batch_labels in dataloader:print("Data:", batch_data)print("Labels:", batch_labels)

运行结果:(顺序会随着Shuffle=True发生变化)

torch.utils.data.IterableDataset

        一个可迭代的数据集。所有表示数据样本可迭代的数据集都应该继承它。当数据来自流时,这种形式的数据集特别有用。所有子类都应该重写__iter__(),它将返回此数据集中样本的迭代器。当子类与DataLoader一起使用时,数据集中的每个项目都将从DataLoader迭代器中产生。当num_workers > 0时,每个工作进程将拥有数据集对象的副本,因此通常希望独立配置每个副本以避免工作进程返回重复的数据。get_worker_info()在工作进程中调用时,返回有关工作进程的信息。它可以在数据集的__iter__()方法或DataLoader的worker_init_fn选项中使用来修改每个副本的行为。

代码运用示例:

import torch
from torch.utils.data import IterableDataset, DataLoader# 自定义 IterableDataset
class NumberStreamDataset(IterableDataset):def __init__(self, start, end):"""Args:start (int): 起始值end (int): 结束值"""self.start = startself.end = enddef __iter__(self):"""定义数据生成逻辑,返回一个迭代器"""for num in range(self.start, self.end):yield num# 创建一个数据集实例
dataset = NumberStreamDataset(start=0, end=10)# 用 DataLoader 加载数据
dataloader = DataLoader(dataset, batch_size=3)# 遍历 DataLoader
for batch in dataloader:print(batch)

运行结果:

torch.utils.data.TensorDataset(*tensors)

        包装张量的数据集。每个样本将通过沿第一个维度索引张量来检索。参数*tensors (张量)表示第一个维度大小相同的张量。

代码运用示例:

import torch
from torch.utils.data import TensorDataset, DataLoader# 创建输入张量和标签张量
data = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]])
labels = torch.tensor([0, 1, 0, 1])# 使用 TensorDataset 封装数据
dataset = TensorDataset(data, labels)# 使用 DataLoader 加载数据
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)# 遍历 DataLoader
for batch_data, batch_labels in dataloader:print("Batch data:", batch_data)print("Batch labels:", batch_labels)

运行结果:(顺序会随着shuffle=True而发生变化)

torch.utils.data.ConcatDataset(datasets)

        将多个数据集连接起来的数据集。此类用于组装不同的现有数据集。参数datasets (序列) 表示要连接的数据集列表

代码运用示例:

import torch
from torch.utils.data import TensorDataset, ConcatDataset, DataLoader# 创建两个数据集
data1 = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
labels1 = torch.tensor([0, 1])
dataset1 = TensorDataset(data1, labels1)data2 = torch.tensor([[5.0, 6.0], [7.0, 8.0]])
labels2 = torch.tensor([1, 0])
dataset2 = TensorDataset(data2, labels2)# 使用 ConcatDataset 拼接两个数据集
concat_dataset = ConcatDataset([dataset1, dataset2])# 用 DataLoader 加载数据
dataloader = DataLoader(concat_dataset, batch_size=2, shuffle=True)# 遍历 DataLoader
for batch_data, batch_labels in dataloader:print("Batch data:", batch_data)print("Batch labels:", batch_labels)

运行结果:

torch.utils.data.Subset(datasetindices)

        指定索引处数据集的子集。参数dataset (Dataset)表示整个数据集,indices (序列) – 为子集选择的整个集合中的索引。

代码运用示例:

import torch
from torch.utils.data import TensorDataset, Subset, DataLoader# 创建一个原始数据集
data = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]])
labels = torch.tensor([0, 1, 0, 1])
dataset = TensorDataset(data, labels)# 使用 Subset 提取索引为 [1, 3] 的样本
indices = [1, 3]
subset = Subset(dataset, indices)# 用 DataLoader 加载子集
dataloader = DataLoader(subset, batch_size=1)# 遍历 DataLoader
for batch_data, batch_labels in dataloader:print("Batch data:", batch_data)print("Batch labels:", batch_labels)

运行结果:

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

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

相关文章

Qt在designer设计师界面使用QSplitter

QSplitter控件是解决软件不同分辨率自适应布局的好帮手之一,该控件无法在控件列表找到,使用条件较为隐蔽 环境 qt5.12.12 MSVC2017 1.新建一个qt项目,初始自带Mainwindow,拖两个qwidget进来,注意此时centralWidget处于…

北京申请中级职称流程(2024年)

想找个完整详细点的申请流程资料真不容易,做个分享送给需要的人吧。 不清楚为什么说文章过度宣传,把链接和页面去掉了,网上自己找一下。 最好用windows自带的EDGE浏览器打开申请网站,只有在开始申请的时间内才可以进行网上申报&…

测评部署和管理 WordPress 最方便的面板

新版宝塔面板快速搭建WordPress新手教程 - 倚栏听风-Morii - 博客园 初学者使用1Panel面板快速搭建WordPress网站 - 倚栏听风-Morii - 博客园 可以看到,无论是宝塔还是1Panel,部署和管理WordPress都有些繁琐,而且还需要额外去配置Nginx和M…

ubuntu:20.04安装协议逆向工具netzob

创建容器 docker run -d --name ubuntu_env ubuntu:20.04 /bin/bash -c "while true; do sleep 1; done" 63a8f5cf5431a930671ff0e7bb2b667adf001efb05fd7261da244879d2699bec 进入容器 PS E:\src> docker exec -it ubuntu_env /bin/bash 安装常用工具 apt upda…

SpringBoot实现WebSocket

参考链接&#xff1a;https://www.kancloud.cn/king_om/mic_03/2783864 一、环境搭建 1.创建SpringBoot项目&#xff0c;引入相关依赖 <dependencies><!-- Spring Boot核心启动器&#xff0c;引入常用依赖基础 --><dependency><groupId>org.springf…

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…

早期超大规模语言模型的尝试——BLOOM模型论文解读,附使用MindSpore和MindNLP的模型和实验复现

背景 预训练语言模型已经成为了现代自然语言处理pipeline中的基石&#xff0c;因为其在少量的标注数据上产生更好的结果。随着ELMo、ULMFiT、GPT和BERT的开发&#xff0c;使用预训练模型在下游任务上微调的范式被广泛使用。随后发现预训练语言模型在没有任何额外训练的情况下任…

【团购核销】抖音生活服务商家应用快速接入②——商家授权

文章目录 一、前言二、授权流程三、授权Url3.1 Url参数表3.2 授权能力表3.3 源码示例 四、授权回调4.1 添加授权回调接口4.2 授权回调接口源码示例 五、实际操作演示六、参考 一、前言 目的&#xff1a;将抖音团购核销的功能集成到我们自己开发的App和小程序中 【团购核销】抖音…

解决 Android 单元测试 No tests found for given includes:

问题 报错&#xff1a; Execution failed for task :testDebugUnitTest. > No tests found for given includes: 解决方案 1、一开始以为是没有给测试类加public修饰 2、然后替换 Test 注解的包可以解决&#xff0c;将 org.junit.jupiter.api.Test 修改为 org.junit.Tes…

gbase8s之mysql的show命令实现

第一步&#xff1a;生成show.sh脚本 cat /home/gbase/show.sh #!/bin/bash #作者&#xff1a;乡村野中医 #创作时间2024-11-21 #脚本名称show.sh function show(){ #echo $# if [ "xdatabases" x$1 ] then echo "select name from sysdatabases;"|…

android 实现答题功能

一、效果 二、实现思路 1、界面实现 实现起来其实不难&#xff0c;首先我们可以看到&#xff0c;界面是由答题进度、题目、选项ABCD组成&#xff0c;现在就是要考虑实现方式&#xff0c;答题进度可以使用Textviewprogressbar实现&#xff0c;题目直接使用Textview&#xff0c;…

正排索引和倒排索引

一、简介 正排索引&#xff1a;一个未经处理的数据库中&#xff0c;一般是以文档ID作为索引&#xff0c;以文档内容作为记录。 倒排索引&#xff1a;Inverted index&#xff0c;指的是将单词或记录作为索引&#xff0c;将文档ID作为记录&#xff0c;这样便可以方便地通过单词或…

Django一分钟:django中收集关联对象关联数据的方法

场景&#xff1a;我有一个模型&#xff0c;被其它多个模型关联&#xff0c;我配置了CASCADE级联删除&#xff0c;我想要告知用户删除该实例之后&#xff0c;哪些关联数据将会被一同删除。 假设我们当前有这样一组模型&#xff1a; class Warehouse(models.Model):""…

卷积神经网络各层介绍

目录 1 卷积层 2 BN层 3 激活层 3.1 ReLU&#xff08;Rectified Linear Unit&#xff09; 3.2 sigmoid 3.3 tanh&#xff08;双曲正切&#xff09; 3.4 Softmax 4 池化层 5 全连接层 6 模型例子 1 卷积层 卷积是使用一个卷积核&#xff08;滤波器&#xff09;对矩阵进…

【工控】线扫相机小结 第四篇

背景 这一片主要是对第三篇继续补充。话说上一篇讲到了两种模式的切换&#xff0c;上一篇还遗留了一个Bug&#xff0c;在这一篇里进行订正&#xff01; 代码回顾 /// <summary>/// 其实就是打开触发/// </summary>void SetLineSacanWorkMode(){-----首先设置为帧…

AI 大模型重塑软件开发的未来

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【软考】系统架构设计师-计算机系统基础(4):计算机网络

计算机网络功能&#xff1a;数据通信、资源共享、管理集中化、分布式处理、负载均衡 5G高峰速率&#xff1a;10Gbit/s 广域网&#xff08;因特网&#xff09;/城域网/局域网&#xff08;以太网&#xff09; 总线型&#xff1a;利用率低&#xff0c;易冲突&#xff0c;干扰大…

Ultiverse 和web3新玩法?AI和GameFi的结合是怎样

Gamef 和 AI 是我们这个周期十分看好两大赛道之一&#xff0c;(Gamef 拥有极强的破圈效应&#xff0c;引领 Web2 用户进军 Web3 最佳利器。AI是这个周期最热门赛道&#xff0c;无论 Web2的 OpenAl&#xff0c;还是 Web3&#xff0c;都成为话题热议焦点。那么结合 GamefiA1双叙事…

Matlab多输入单输出之倾斜手写数字识别

本文主要介绍使用matlab构建多输入单输出的网络架构&#xff0c;来实现倾斜的手写数字识别&#xff0c;使用concatenationLayer来拼接特征&#xff0c;实现网络输入多个特征。 1.加载训练数据 加载数据&#xff1a;手写数字的图像、真实数字标签和数字顺时针旋转的角度。 lo…

R | 统一栅格数据的坐标系、分辨率和行列号

各位同学&#xff0c;在做相关性等分析时&#xff0c;经常会遇到各栅格数据间的行列号不统一等问题&#xff0c;下面的代码能直接解决这类麻烦。以某个栅格数据的坐标系、分辨率和行列号为准&#xff0c;统一文件夹内所有栅格并输出到新的文件夹。 代码只需要更改输入输出和ti…