浅谈PyTorch的数据读取机制Dataloader与Dataset

 更新时间:2023年07月29日 09:55:29   作者:木千之  
这篇文章主要介绍了浅谈PyTorch的数据读取机制Dataloader与Dataset,DataLoader的作用是构建一个可迭代的数据装载器,每次执行循环的时候,就从中读取一批Batchsize大小的样本进行训练,需要的朋友可以参考下

Dataloader与DataSet数据读取方法

DataLoader与DataSet是PyTorch数据读取的核心。

torch.utils.DataLoader”的作用是构建一个可迭代的数据装载器,每次执行循环的时候,就从中读取一批Batchsize大小的样本进行训练。

其主要参数有五项:

  1. dataset:隶属DataSet类,表示数据从哪里读取以及如何读取
  2. batchsize:批大小
  3. num_works:是否多进程读取数据
  4. shuffle:每个epoch是否乱序
  5. drop_last:当样本数不能被batchsize整除时,是否舍弃最后一批数据

上述主要参数中num_works通常在单进程时默认为“0”,也可以在支持多进程的设备上设置为允许的“4 | 8 | 16”等。

shuffle则通常设置为使用乱序(True),以使得每次数据读取具有随机性。

这里颇为重要的是“Epoch、Iteration和Batchsize”之间的关系:

1)Epoch表示所有训练样本都已输入到模型中,记为一个Epoch;

2)Iteration表示一批样本输入到模型中,记为一个Iteration;

3)Batchsize表示批大小,决定一个Epoch中有多少个Iteration。当样本数可以被Batchsize整除时,三者成立关系,即全体样本分成Batchsize分批次输入模型,每批次记为一次Iteration。

若样本总数80个,当Batchsize=8时,可以知道“1 Epoch = 10 Iteration”。

若样本总数87个,当Batchsize-8时,可以知道:1)若“drop_last=True”,则“1 Epoch = 10 Iteration”;2)

若“drop_last=False”,则“1 Epoch = 11 Iteration”,其最后一个Iteration时样本个数为7,小于既定Batchsize。

torch.utils.data.Dataset”主要用于定义数据从哪里读取以及如何读取的问题。其定义为DataSet抽象类,所有自定义的Dataset都需要继承它,并复写“getitem()”内构函数,该函数接受一个索引,并返回一个样本。

在这里插入图片描述

DataLoader与DataSet数据读取机制

PyTorch的数据读取机制通常围绕三个核心问题展开,即:

读取哪些数据?从哪里读取数据?怎么读取数据?

事实上,通过在PyCharm中进行代码调试,我们可以简要回答上述问题:

1)通过Sampler取样器按序或随机挑选出Batchsize数量的索引列表;

2)使用DataSet中的data_dir指定硬盘上的数据访问路径;

3)使用DataSet中自定义的getitem()方法,基于Sampler返回的索引列表读取相应数据和标签,并拼接成新的列表数据。

在这里插入图片描述

事实上,PyTorch的数据读取经过了诸多函数的跳转。在for循环中首先调用了“DataLoader”,进而使用Sampler、Dataset和getitem解决“数据读哪些?从哪读?怎么读?”的问题。

最后,我们提供一份PyTorch中DataLoader数据读取机制的函数跳转流程图,供大家参考学习。

在这里插入图片描述

到此这篇关于浅谈PyTorch的数据读取机制Dataloader与Dataset的文章就介绍到这了,更多相关PyTorch的Dataloader与Dataset内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python列表(list)常用操作方法小结

    Python列表(list)常用操作方法小结

    这篇文章主要介绍了Python列表(list)常用操作方法小结,本文讲解了常用操作方法和一些简单代码实例,需要的朋友可以参考下
    2015-02-02
  • python开发之anaconda以及win7下安装gensim的方法

    python开发之anaconda以及win7下安装gensim的方法

    这篇文章主要介绍了python开发之anaconda以及win7下安装gensim的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python去重,一个由dict组成的list的去重示例

    python去重,一个由dict组成的list的去重示例

    今天小编就为大家分享一篇python去重,一个由dict组成的list的去重示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • WxPython开发之列表数据的自定义打印处理

    WxPython开发之列表数据的自定义打印处理

    这篇文章主要为大家详细介绍了如何利用WxPython内置的打印数据组件实现列表数据的自定义打印处理,以及对记录进行分页等常规操作,需要的可以参考下
    2025-03-03
  • Python基础之字典常见操作经典实例详解

    Python基础之字典常见操作经典实例详解

    这篇文章主要介绍了Python基础之字典常见操作,结合实例形式详细分析了Python基本功能、创建、内置函数与相关使用技巧,需要的朋友可以参考下
    2020-02-02
  • 如何在python 中导入 package

    如何在python 中导入 package

    这篇文章主要介绍了 如何在python中导入,package,package 在python中是一种有效组织代码,module可以是一个文件,可以通过import来导入一个module 单个文件,而,package,则是作为一个目录来导入,下文操作流程需要的朋友可以参考一下
    2022-04-04
  • 利用Python过滤相似文本的简单方法示例

    利用Python过滤相似文本的简单方法示例

    这篇文章主要给大家介绍了关于利用Python过滤相似文本的简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python3通过chmod修改目录或文件权限的方法示例

    Python3通过chmod修改目录或文件权限的方法示例

    这篇文章主要介绍了Python3通过chmod修改目录或文件权限的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Python插入Elasticsearch操作方法解析

    Python插入Elasticsearch操作方法解析

    这篇文章主要介绍了Python插入Elasticsearch操作方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • pandas如何优雅的列转行及行转列详解

    pandas如何优雅的列转行及行转列详解

    我们在做数据处理的时候遇到pandas列转行的问题,这篇文章主要给大家介绍了关于pandas如何优雅的列转行及行转列的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12

最新评论