千家信息网

torch.utils.data.DataLoader与迭代器转换的方法

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"torch.utils.data.DataLoader与迭代器转换的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"torch.utils
千家信息网最后更新 2026年11月02日torch.utils.data.DataLoader与迭代器转换的方法

这篇文章主要介绍"torch.utils.data.DataLoader与迭代器转换的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"torch.utils.data.DataLoader与迭代器转换的方法"文章能帮助大家解决问题。

在做实验时,我们常常会使用用开源的数据集进行测试。而Pytorch中内置了许多数据集,这些数据集我们常常使用DataLoader类进行加载。
如下面这个我们使用DataLoader类加载torch.vision中的FashionMNIST数据集。

from torch.utils.data import DataLoaderfrom torchvision import datasetsfrom torchvision.transforms import ToTensorimport 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())

我们接下来定义Dataloader对象用于加载这两个数据集:

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

那么这个train_dataloader究竟是什么类型呢?

print(type(train_dataloader))  # 

我们可以将先其转换为迭代器类型。

print(type(iter(train_dataloader)))# 

然后再使用next(iter(train_dataloader))从迭代器里取数据,如下所示:

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

图片可视化显示如下:

不过有读者可能就会产生疑问,很多时候我们并没有将DataLoader类型强制转换成迭代器类型呀,大多数时候我们会写如下代码:

for train_features, train_labels in train_dataloader:     print(train_features.shape) # torch.Size([64, 1, 28, 28])    print(train_features[0].shape) # torch.Size([1, 28, 28])    print(train_features[0].squeeze().shape) # torch.Size([28, 28])        img = train_features[0].squeeze()    label = train_labels[0]    plt.imshow(img, cmap="gray")    plt.show()    print(f"Label: {label}")

可以看到,该代码也能够正常迭代训练数据,前三个样本的控制台打印输出为:

torch.Size([64, 1, 28, 28])torch.Size([1, 28, 28])torch.Size([28, 28])Label: 7torch.Size([64, 1, 28, 28])torch.Size([1, 28, 28])torch.Size([28, 28])Label: 4torch.Size([64, 1, 28, 28])torch.Size([1, 28, 28])torch.Size([28, 28])Label: 1

那么为什么我们这里没有显式将Dataloader转换为迭代器类型呢,其实是Python语言for循环的一种机制,一旦我们用for ... in ...句式来迭代一个对象,那么Python解释器就会偷偷地自动帮我们创建好迭代器,也就是说

for train_features, train_labels in train_dataloader:

实际上等同于

for train_features, train_labels in iter(train_dataloader):

更进一步,这实际上等同于

train_iterator = iter(train_dataloader)try:    while True:        train_features, train_labels = next(train_iterator)except StopIteration:    pass

推而广之,我们在用Python迭代直接迭代列表时:

for x in [1, 2, 3, 4]:

其实Python解释器已经为我们隐式转换为迭代器了:

list_iterator = iter([1, 2, 3, 4])try:    while True:        x = next(list_iterator)except StopIteration:    pass

关于"torch.utils.data.DataLoader与迭代器转换的方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

迭代 数据 类型 方法 实际 知识 代码 图片 对象 控制台 时候 行业 解释器 控制 解释 不同 实用 成功 接下来 推而广之 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中关村互联网 科技集团 金融科技还是互联网 互联网科技卖菜 唐信互联网科技 百单互联网科技有限公司 顺玮阁互联网科技 科技大学互联网专业好不好 农村开互联网科技讲堂 天速互联网络科技有限公司 中国互联网有什么科技含量 消费医药和互联网科技 保险科技服务互联网营销体系 互联网科技公司营业执照怎么办理 浙南科技城互联网大厦招聘 半导体行业属于互联网高科技类吗 江苏互联网智能科技产品出厂价 互联网科技手抄报图片 中国科技和美国互联网 科技互联网专业务虚会材料 互联网科技创业计划的风险分析 保险科技 互联网保险 互联网科技公司的优势 互联网金融公司科技 万易互联网科技 鑫亿盛互联网科技 民营互联网公司国防科技 广州百诚互联网科技有限公司官网 神州科技互联网有限公司 上海同邻互联网科技有限公司规模 利用互联网等科技手段
0