广告
返回顶部
首页 > 资讯 > 精选 >torch.utils.data.DataLoader与迭代器转换的方法
  • 819
分享到

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

2023-06-29 05:06:03 819人浏览 安东尼
摘要

这篇文章主要介绍“torch.utils.data.DataLoader与迭代器转换的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“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))  # <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

图片可视化显示如下:

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

不过有读者可能就会产生疑问,很多时候我们并没有将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与迭代器转换的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: torch.utils.data.DataLoader与迭代器转换的方法

本文链接: https://www.lsjlt.com/news/323020.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • torch.utils.data.DataLoader与迭代器转换的方法
    这篇文章主要介绍“torch.utils.data.DataLoader与迭代器转换的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“torch.utils.data.DataLoader与迭代器...
    99+
    2023-06-29
  • torch.utils.data.DataLoader与迭代器转换操作
    在做实验时,我们常常会使用用开源的数据集进行测试。而Pytorch中内置了许多数据集,这些数据集我们常常使用DataLoader类进行加载。如下面这个我们使用DataLoader类加...
    99+
    2022-11-13
  • c++将vector迭代器转换为指针的实现方式
    目录将vector迭代器转换为指针vector与迭代器的使用1. 标准库vector2. 迭代器将vector迭代器转换为指针 定义一个Domain结构体以及容器、迭代器 struc...
    99+
    2022-11-16
    c++ vector迭代器 c++ 迭代器 指针 vector迭代器转为指针
  • css3过渡与转换的方法
    这篇文章主要介绍“css3过渡与转换的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“css3过渡与转换的方法”文章能帮助大家解决问题。一 css3过渡 转换cs...
    99+
    2022-10-19
  • Python中迭代器与生成器的用法
    一、迭代器(foreach) 1、可迭代的对象 内置有__iter__方法的都叫可迭代的对象。 Python内置str、list、tuple、dict、set、file都是可迭代对象...
    99+
    2022-11-11
  • python中如何用递归与迭代方法实现链表反转
    这篇文章主要讲解了“python中如何用递归与迭代方法实现链表反转”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中如何用递归与迭代方法实现链表反转”吧!定义链表node结构:cl...
    99+
    2023-06-29
  • C++迭代器与二分查找方法是什么
    本篇内容主要讲解“C++迭代器与二分查找方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++迭代器与二分查找方法是什么”吧!boolsearch_value_loop(std::vec...
    99+
    2023-06-04
  • iwms access与sql版的安装与转换方法
    本篇内容介绍了“iwms access与sql版的安装与转换方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2022-10-18
  • android byte[] 和short[]转换的方法代码
    1,工具代码 代码如下:public class BytesTransUtil {  private String TAG = "BytesTransUtil";&n...
    99+
    2022-06-06
    short byte 方法 Android
  • 几种常见的HTML与PDF转换方法
    HTML与PDF是两种常见的文档格式,HTML用于在web浏览器中呈现内容,而PDF用于打印和文档共享。有时我们需要将HTML转换成PDF或将PDF转换成HTML以适应不同的需求。本文将介绍几种常见的HTML与PDF转换方法。一、使用在线转...
    99+
    2023-05-14
  • fastjson--对象与JSON之间的转换方法
    1、Java对象–>JSON对象: (JSONObject)JSONObject.toJSON(Java对象实例) public class JSON2JavaTest{ public static...
    99+
    2023-09-04
    json java
  • java迭代器遍历的方法是什么
    Java迭代器遍历的方法是使用while循环和迭代器的`hasNext()`和`next()`方法进行遍历。具体步骤如下:1. 创建...
    99+
    2023-08-11
    java
  • python迭代器模块itertools常用的方法
    目录前言1.无限迭代器2.有限迭代器3.组合迭代器前言 itertools是python中内置的一种高效的生成各种迭代器或者是类的模块,这些函数的返回值为一个迭代器,经常被用在for...
    99+
    2022-11-11
  • Java迭代器遍历list的方法及代码分析
    Java迭代器遍历list的方法是什么?动力节点小编来告诉大家。迭代器可用于遍历ArrayList。如果ArrayList中有更多元素,则hasNext()方法返回true,否则返回...
    99+
    2022-11-21
    Java 迭代器 遍历 list
  • java中Calendar与Date类型互相转换的方法
    下文笔者讲述使用Java代码将Calendar与Date类型互转的方法分享,如下所示:Calendar与Date类型是我们日常开发中常用的两种数据类型, 它们用于不同的场景,两者具有...
    99+
    2022-11-13
  • C语言中QString与QByteArray互相转换的方法
    目录[1] QString与QByteArray互相转换的方法QString转QByteArray方法QByteArray转QString方法QByteArray类同样不以&rsqu...
    99+
    2023-05-20
    C语言 QString与QByteArray QString QByteArray
  • java公历与农历转换的方法是什么
    Java中提供了一些库和方法来实现公历与农历的转换。1. 使用Java 8中的java.time包中的类来进行转换。这些类包括`Lo...
    99+
    2023-08-17
    java
  • Pytorch数据类型与转换的方法有哪些
    本篇内容介绍了“Pytorch数据类型与转换的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Pytorch数据类型与转换(torc...
    99+
    2023-07-05
  • Python中的迭代器与生成器高级用法解析
    迭代器 迭代器是依附于迭代协议的对象——基本意味它有一个next方法(method),当调用时,返回序列中的下一个项目。当无项目可返回时,引发(raise)StopIteration异常。 迭代对象允许一次...
    99+
    2022-06-04
    生成器 高级 迭代
  • python中实现迭代器(iterator)的方法示例
    概述 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 延迟计算或惰性求值 (Lazy evaluation) 迭代器不要求你事先准...
    99+
    2022-06-04
    示例 迭代 方法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作