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

1.torch.utils.data.TensorDataset

功能定位

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

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

python 复制代码
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 的类实例等),实现了诸如批量加载数据、打乱数据顺序、并行加载数据等功能,旨在让数据能够以合适的方式、合适的批量大小等被送入到模型中进行训练、验证或测试等操作。

示例:

python 复制代码
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 按照训练需求来加载和处理这些数据并送入模型中。

python 复制代码
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)
相关推荐
咚咚王者3 分钟前
人工智能之核心基础 机器学习 第十六章 模型优化
人工智能·机器学习
电商API_180079052474 分钟前
1688商品详情采集API全解析:技术原理、实操指南与业务落地
大数据·前端·人工智能·网络爬虫
向上的车轮9 分钟前
麦肯锡《智能体、机器人与我们:AI时代的技能协作》
人工智能·机器人
叫我:松哥12 分钟前
基于Flask框架开发的二手房数据分析与推荐管理平台,集成大数据分析、机器学习预测和智能推荐技术
大数据·python·深度学习·机器学习·数据分析·flask
2501_9458374318 分钟前
数字经济的 “安全基石”—— 云服务器零信任架构如何筑牢数据安全防线
人工智能
2501_9421917719 分钟前
【深度学习应用】香蕉镰刀菌症状识别与分类:基于YOLO13-C3k2-MBRConv5模型的实现与分析
人工智能·深度学习·分类
Coder_Boy_19 分钟前
基于SpringAI的在线考试系统-DDD(领域驱动设计)核心概念及落地架构全总结
java·大数据·人工智能·spring boot·架构·ddd·tdd
AI小怪兽20 分钟前
YOLO26:面向实时目标检测的关键架构增强与性能基准测试
人工智能·yolo·目标检测·计算机视觉·目标跟踪·架构
知乎的哥廷根数学学派27 分钟前
基于卷积特征提取和液态神经网络的航空发动机剩余使用寿命预测算法(python)
人工智能·pytorch·python·深度学习·神经网络·算法
高洁0127 分钟前
AIGC技术与进展(2)
人工智能·python·深度学习·机器学习·数据挖掘