浅谈torch.utils.data.TensorDataset和torch.utils.data.DataLoader

news2025/1/5 15:58:43

1.torch.utils.data.TensorDataset

功能定位

torch.utils.data.TensorDataset 是一个将多个张量(Tensor)数据进行简单包装整合的数据集类,它主要的作用是将相关联的数据(比如特征数据和对应的标签数据等)组合在一起,形成一个方便后续用于训练等操作的数据集对象。

例如,如果你有输入特征数据 x(形状为 [n_samples, feature_dim])和对应的标签数据 y(形状为 [n_samples]),且它们都是 torch.Tensor 类型,可以这样创建 TensorDataset

import torch
from torch.utils.data import TensorDataset

x = torch.randn(100, 10)  # 模拟100个样本,每个样本特征维度为10
y = torch.randint(0, 2, (100,))  # 模拟二分类标签

dataset = TensorDataset(x, y)
特点
  • 简单包装:只是把传入的张量按照样本维度进行了对应组合,并没有对数据做复杂的预处理、采样等额外操作。

  • 索引支持:支持像普通列表那样通过索引访问其中的数据元素,例如 dataset[0] 会返回由对应索引的特征和标签组成的元组(按照传入构造函数的张量顺序)。

  • 适用于小型数据集直接使用:当数据量不大且数据格式已经整理为张量形式时,可以直接基于它来进行简单的模型训练循环等操作,不过对于批量处理等更复杂的情况支持有限,需要进一步配合其他工具。

2.torch.utils.data.DataLoader

功能定位

torch.utils.data.DataLoader 是一个用于加载数据的工具类,它围绕着给定的数据集(比如 TensorDataset 或者自定义的继承自 Dataset 的类实例等),实现了诸如批量加载数据、打乱数据顺序、并行加载数据等功能,旨在让数据能够以合适的方式、合适的批量大小等被送入到模型中进行训练、验证或测试等操作。

示例:

from torch.utils.data import DataLoader

batch_size = 10
dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)

for batch_x, batch_y in dataloader:
    # 这里的batch_x和batch_y就是每次迭代取出的一个批量的特征和标签数据
    pass
特点
  • 批量处理:可以按照设定的 batch_size 参数,将数据集中的数据划分为一个个的小批量(mini-batch),方便模型以批量的方式进行梯度计算更新,有助于优化训练过程和提升效率,尤其在大数据集场景下优势明显。

  • 数据打乱:通过设置 shuffle=True 可以在每个训练轮次(epoch)开始时对数据集里面的数据顺序进行随机打乱,使得数据的输入顺序具有随机性,这有助于提升模型训练的泛化能力,避免模型因数据顺序固定而产生过拟合等问题。

  • 并行加载:支持多进程加载数据(通过设置 num_workers 参数大于 0),能够利用多核 CPU 的优势加快数据读取和预处理的速度,特别是在处理大规模数据集或者数据加载比较耗时的情况下,能显著提升整体训练效率。

  • 灵活性和通用性:它可以适配各种不同类型的数据集,只要这些数据集继承自 torch.utils.data.Dataset 抽象类并实现了必要的 __len____getitem__ 等方法,因此无论是简单的 TensorDataset 还是复杂的自定义数据集都可以用它来加载数据。

总的来说,TensorDataset 侧重于对已有张量数据进行简单的整合包装形成数据集;而 DataLoader 侧重于围绕数据集实现数据的批量加载、打乱顺序、并行化等复杂的数据加载相关功能,它们通常配合使用,先使用 TensorDataset 组织好数据,再通过 DataLoader 按照训练需求来加载和处理这些数据并送入模型中。

from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader

train_ds = TensorDataset(x_train, y_train)
train_dl = DataLoader(train_ds, batch_size=bs, shuffle=True)

valid_ds = TensorDataset(x_valid, y_valid)
valid_dl = DataLoader(valid_ds, batch_size=bs)

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

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

相关文章

Spire.PDF for .NET【页面设置】演示:向 PDF 添加平铺背景图像

平铺背景通常是指用一个或多个小图像重复填充的背景。在本文中,您将学习如何在 PDF 中平铺图像,并使用 C# 和 VB.NET 为您的 PDF 创建平铺背景。 Spire.PDF for .NET 是一款独立 PDF 控件,用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 …

文件本地和OSS上传

这里写目录标题 前端传出文件后端本地存储阿里云OSS存储上传Demo实现上传ConfigurationProperties 前端传出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head&g…

SpringCloud源码分析-Gateway

Gateway核心原理&#xff0c;请求经过一系列的责任链最后到达服务端。

两个等号和三个等号(待查资料)

1太癫了&#xff0c;居然时要才行&#xff0c;都不行 2. 三等号的结果 .。。。。毁灭吧

什么是神经网络?神经网络的基本组成部分训练神经网络激活函数有哪些局限性和挑战

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

《Java核心技术II》流中的filter、map和flatMap方法

filter、map和flatMap方法 filter filter通过转换产生过滤后的新流,将字符串流转化为只包含长单词的另一个流。 List words ...; Stream longWords words.stream().filter(w->w.length()>12) filter类型是Predicate(谓词&#xff0c;表示动作)类型对象&#xff0c…

linux进阶

目录 变量 shell变量 环境变量 预定义变量 位置变量 其他 管道与重定向 管道 重定向 shell脚本 分支结构 循环结构 数组 脚本实例 变量 shell变量 shell变量&#xff1a;shell程序在内存中存储数据的容器 shell变量的设置&#xff1a;colorred 将命令的结果赋值…

阿赵的MaxScript学习笔记分享十六《MaxScript和WinForm交互》

MaxScript学习笔记目录 大家好&#xff0c;我是阿赵。   之前有网友给我留言说MaxScript和DotNet的WinForm界面交互有问题。我回头看了一下&#xff0c;发现之前的MaxScript文章是漏了这部分没有说明&#xff0c;这里补充一下。这里的内容主要是用C#写一个WinForm界面&#x…

出海新势力:巴西短剧的崛起与出海系统开发平台的赋能

在全球短剧蓬勃发展的浪潮中&#xff0c;巴西短剧宛如一颗耀眼的新星&#xff0c;迅速在拉美文娱的天空中崭露头角&#xff0c;成为备受瞩目的潜力股&#xff0c;正以独特的魅力吸引着越来越多观众的目光&#xff0c;在国际舞台上绽放出属于自己的光彩。 巴西短剧缘何火爆&…

HTML5新特性|01 音频视频

音频 1、Audio (音频) HTML5提供了播放音频文件的标准 2、control(控制器) control 属性供添加播放、暂停和音量控件 3、标签: <audio> 定义声音 <source> 规定多媒体资源,可以是多个<!DOCTYPE html> <html lang"en"> <head><…

多模态论文笔记——Coca

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍多模态模型Coca&#xff0c;在DALLE 3中使用其作为captioner基准模型的原因和优势。 文章目录 ALBEF论文模型结构组成训练目标 CoCa​论文模型结构CoCa…

Flutter 调试环境下浏览器网络请求跨域问题解决方案

本篇文章主要讲解&#xff0c;Flutter调试环境情况下&#xff0c;浏览器调试报错跨域问题的解决方法&#xff0c;通过本篇文章你可以快速掌握Flutter调试环境情况下的跨域问题。 日期&#xff1a;2024年12月28日 作者&#xff1a;任聪聪 报错现象&#xff1a; 报文信息&#xf…

在K8S中,如何部署kubesphere?

在Kubernetes集群中&#xff0c;对于一些基础能力较弱的群体来说K8S控制面板操作存在一定的难度&#xff0c;此时kubesphere可以有效的解决这类难题。以下是部署kubesphere的操作步骤&#xff1a; 操作部署&#xff1a; 1. 部署nfs共享存储目录 yum -y install nfs-server e…

2024-12-29-sklearn学习(25)无监督学习-神经网络模型(无监督) 烟笼寒水月笼沙,夜泊秦淮近酒家。

文章目录 sklearn学习(25) 无监督学习-神经网络模型&#xff08;无监督&#xff09;25.1 限制波尔兹曼机25.1.1 图形模型和参数化25.1.2 伯努利限制玻尔兹曼机25.1.3 随机最大似然学习 sklearn学习(25) 无监督学习-神经网络模型&#xff08;无监督&#xff09; 文章参考网站&a…

数据挖掘——决策树分类

数据挖掘——决策树分类 决策树分类Hunt算法信息增益增益比率基尼指数连续数据总结 决策树分类 树状结构&#xff0c;可以很好的对数据进行分类&#xff1b; 决策树的根节点到叶节点的每一条路径构建一条规则&#xff1b;具有互斥且完备的特点&#xff0c;即每一个样本均被且…

数据仓库建设方案和经验总结

在做数据集成的过程中&#xff0c;往往第二步的需求就是建设数仓由于数据分散在不同的存储环境或数据库中&#xff0c;对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理&#xff0c;造成资源和人力的浪费。同时&#xff0c;目前的系统架构&#xff0c;无…

迈向AGI,3、2、1,2025上链接!

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 往期精彩文章推荐 关于AI TIME AI TIME源起于2019年&#xff0c;旨在发扬科学思辨精神&#xff0c;邀请各界人士对人工智能理论、算法和场景应用的本质问题进行探索&#xff0c;加强思想碰撞&#xff0c;链接全…

云效流水线使用Node构建部署前端web项目

云效流水线实现自动化部署 背景新建流水线配置流水线运行流水线总结 背景 先来看看没有配置云效流水线之前的部署流程&#xff1a; 而且宝塔会经常要求重新登录&#xff0c;麻烦的很 网上博客分享了不少的配置流程&#xff0c;这一篇博客的亮点就是不仅给出了npm命令构建&…

计算机网络 (14)数字传输系统

一、定义与原理 数字传输系统&#xff0c;顾名思义&#xff0c;是一种将连续变化的模拟信号转换为离散的数字信号&#xff0c;并通过适当的传输媒介进行传递的系统。在数字传输系统中&#xff0c;信息被编码成一系列的二进制数字&#xff0c;即0和1&#xff0c;这些数字序列能够…

【Leecode】Leecode刷题之路第97天之交错字符串

题目出处 97-交错字符串-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 97-交错字符串-官方解法 方法1&#xff1a;动态规划 思路&#xff1a; class Solution {public boolean isInte…