torch.utils.data.DataLoader中的next(iter(train_dataloader))

news2024/11/24 10:45:10

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

from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plt

training_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))  # <class 'torch.utils.data.dataloader.DataLoader'>

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

print(type(iter(train_dataloader)))# <class 'torch.utils.data.dataloader._SingleProcessDataLoaderIter'>

然后再使用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: 7
torch.Size([64, 1, 28, 28])
torch.Size([1, 28, 28])
torch.Size([28, 28])
Label: 4
torch.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

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

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

相关文章

数据结构入门(C语言)顺序表的增删查改

目录 前言1. 顺序表的概念2. 动态顺序表2.1 顺序表的初始化与销毁2.2 顺序表的尾插容量检查2.3 顺序表的尾删2.4 顺序表的头插2.5 顺序表的头删2.6 固定位置的插入2.7 固定位置的删除2.8 查找和打印2.9 修改元素主函数部分(菜单) 结语 前言 本章会用C语言来描述数据结构中的顺…

协同运力、算力、存力,加速迈向智能世界

2023年4月20日&#xff0c;华为在HAS2023期间举办“迈向智能世界”主题论坛&#xff0c;吸引了来自全球的分析师、专家学者及媒体与会。会上&#xff0c;华为ICT战略与Marketing总裁彭松发表了“持续技术创新&#xff0c;加速迈向智能世界”的主题演讲。 华为ICT战略与Marketin…

zabbix监控linux主机

1.本实验使用centos7主机&#xff0c;IP地址为10.1.60.115&#xff0c;firewalld和selinux服务已关闭 2.下载zabbix yum源(与zabbix server用一样的版本) rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 3.安装zabbix客户…

玛雅水上乐园|玩趣系列作品集

玛雅水上乐园曾经是一座历史悠久的玛雅金字塔&#xff0c;曾用于宗教和水上航行&#xff0c;被废弃了 3000 多年。现在&#xff0c;01a1 工作室已将其改造成一个令人兴奋的旅游景点&#xff0c;在这里你可以享受美食和饮料&#xff0c;享受日光浴&#xff0c;并结交新朋友。所以…

从零学习SDK(8)SDK的集成和部署

选择使用SDK与其他平台和服务进行集成和部署的好处有&#xff1a; 简化开发流程&#xff0c;节省时间和成本&#xff0c;无需从零开始编写复杂的代码逻辑。 保证功能的稳定性和兼容性&#xff0c;避免出现各种潜在的错误和问题。 享受SDK提供方的技术支持和更新&#xff0c;获…

L频段GaN功率放大器的设计关键点

氮化镓技术的不断进步促使设备在更高的功率、电源电压和频率下工作。 ​图1 QPD1013 晶体管的照片 如图1所示&#xff0c; QPD1013晶体管采用0.50 μm GaN-on-SiC技术。它采用具有成本效益的6.6x7.2 mm DFN(双边扁平无引脚)封装&#xff0c;与传统的金属陶瓷封装相比&#xff…

ROS学习——rotors仿真下载与运行

rotors 无人机仿真主要分为两类&#xff1a;硬件在环仿真&#xff08;HITL&#xff09;和软件在环仿真&#xff08;SITL全称Software in the loop&#xff09;。 无人机软件在环仿真是指完全用计算机来模拟出无人机飞行时的状态&#xff0c;而硬件在环仿真是指计算机连接飞控…

【ArcGIS Pro二次开发】(22):生成分级用地编码和名称

在国土空间规划中&#xff0c;用地用海分类采用三级分类体系&#xff0c;共设置24种一级类、106种二级类及39 种三级类。在某些场景中&#xff0c;需要按等级归类并汇总统计。 这个小工具的作用就是通过用地编码生成三级地类&#xff0c;作为后续统计的基础。 一、要实现的功能…

研读Rust圣经解析——Rust learn-3(变量与可变性,数据类型)

研读Rust圣经解析——Rust learn-3&#xff08;变量与可变性&#xff0c;数据类型&#xff09; 变量|常量与可变性变量声明案例为什么不可变变量可变&#xff08;mut关键字&#xff09;变量可变&#xff08;覆盖&#xff09; 常量声明 数据类型标量类型整型整型字面值整型溢出问…

ECShop开源商城与COS互通:降低本地存储负载、提升访问体验

ECShop简介 ECShop是一款开源电子商务平台&#xff0c;具有简单易用、安全稳定、模块化设计等特点。它提供了完整的电子商务解决方案&#xff0c;包括商品管理、订单管理、支付管理、配送管理、会员管理、促销管理、数据统计等功能。ECShop支持多语言、多货币、多种支付方式和配…

防火墙做网关双链路接入不同ISP

USG作为校园或大型企业出口网关可以实现内网用户通过两个运营商访问Internet可以实现外网用户访问内网服务器&#xff0c;并保护内网不受网络攻击。 组网需求&#xff1a; 某学校网络通过USG连接到Internet&#xff0c;校内组网情况如下&#xff1a; 校内用户主要分布在教学…

【Java|golang】2409. 统计共同度过的日子数---golang中全局变量带来的坑

Alice 和 Bob 计划分别去罗马开会。 给你四个字符串 arriveAlice &#xff0c;leaveAlice &#xff0c;arriveBob 和 leaveBob 。Alice 会在日期 arriveAlice 到 leaveAlice 之间在城市里&#xff08;日期为闭区间&#xff09;&#xff0c;而 Bob 在日期 arriveBob 到 leaveBo…

CTFWIKI-PWN-ret2libc

目录 1.libc 2.plt 和got 3.调用system 4.flat函数 5.libc泄露 例题1 checksec ida 计算偏移量 查找system.plt 查找/bin/sh 1.ida 2.ROPgadget exp 例题2 checksec ida 思路 给出流程图 查看bss是否可以写入 exp 例题3 checksec ida 偏移量 找puts的go…

投屏市场的挑战与发展趋势

投屏的定义 投屏是指将手机、平板、电脑等设备的屏幕内容无线传输到电视、投影仪等大屏幕上的技术&#xff0c;也称为无线投屏、屏幕镜像、屏幕共享等。投屏技术可以实现多屏互动、内容共享、远程协作等功能&#xff0c;为用户提供更丰富的视听体验和更便捷的工作方式。 投屏市…

Jupyter Notebook小知识

目录 1 快捷键1.1 常用快捷键1.2 魔法函数 2 常用快捷键2.1 模式切换2.2 命令模式快捷键2.3 编辑模式快捷键3 Matplotlib绘图 4 小技巧4.1 文件默认目录的查看以及更改4.2 更改主题颜色 5 其它5.1 python中 r, b, u, f 的含义5.2 f/format():格式化操作 6 常见问题6.1 查看模块…

25K测试老鸟6年经验的面试心得,四种公司、四种问题…

这里总结了下自己今年的面试情况 先说一下自己的个人情况&#xff0c;普通二本计算机专业毕业&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能。趁着金三银四跳槽季&#xff0c;面试字节跳动测试岗技术面都已经过了&#xff0c;本来以为是…

基于OC端的Bridge-API组件化应用

前言 在移动应用开发中&#xff0c;组件化可以提高代码的模块化和重用性&#xff0c;降低耦合度。当下大部分APP都至少包含一到两种Hybrid框架&#xff0c;H5基本是必要的&#xff0c;还可能叠加React Natvie、Weex或Flutter。 对于Hybird来说&#xff0c;Native的很多能力是…

Ae:自动定向

Ae 菜单&#xff1a;图层/变换/自动定向 Auto-Orient 快捷键&#xff1a;Ctrl Alt O 自动定向 Auto-Orient是 Ae 图层中的一个附加的、隐藏实现&#xff08;不会在时间轴面板上更改属性的值&#xff09;的功能&#xff0c;它可以使得图层自动旋转或改变方向以朝向指定的运动路…

HIVE相关操作

HIVE有两种启动方式 方式1&#xff1a; bin/hive 即Hive的Shell客户端&#xff0c;可以直接写SQL方式2&#xff1a; bin/hive --service hiveserver2 后台执行脚本&#xff1a;nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 & bin/hiv…

Vue.js列表渲染指令v-for

目录 一、原理概述 二、基本用法 &#xff08;1&#xff09;v-for循环普通数组 &#xff08;2&#xff09;v-for循环对象 &#xff08;3&#xff09;v-for循环对象数组 &#xff08;4&#xff09;v-for迭代整数 一、原理概述 v-for指令时在模板编译的代码生成阶段实现的…