千家信息网

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

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要介绍"torch.utils.data.DataLoader与迭代器转换的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"torch.utils
千家信息网最后更新 2025年01月17日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安全错误 数据库的锁怎样保障安全 衡泰软件开发 我的世界官方服务器在哪里下载 舟山手机软件开发联系方式 宾馆数据库安全性 网络安全日志收集与分析考试题库 网络技术网络管理方向就业发展 软件开发工作者适合哪些饮食 多个线程查询数据库怎么解决 bak文件怎么导入数据库 网络技术与软件专业考研 我的世界改名服务器不显示 软件开发成本预算表怎么做 信誉可靠的零信任网络安全 网络安全法国家 靠谱的erp财务软件开发流程 土规怎么按规程建数据库 镇海应用软件开发商 小程序服务器和域名一年多少钱 软件开发 独立开发者 与网络安全有关的技术 怎样查询魔兽世界服务器玩家人数 华为云服务器网站排版 中职一年级计算机网络技术试卷 智能网络安全专业 我军网络安全架构的背景 潮能力软件开发工作室 数据库对比更新批量 北京金诺互联网科技有限公司 软工导论软件开发 什么是网络技术转让优化价格
0