• 【pytorch】torch.utils.data.DataLoader


    简介

    DataLoader是PyTorch中的一种数据类型。对数据进行按批读取。

    使用Pytorch自定义读取数据时步骤如下:
    1)创建Dataset对象
    2)将Dataset对象作为参数传递到Dataloader中

    Dataloader 就是一个迭代器,最基本的使用就是传入一个 Dataset 对象,它就会根据参数 batch_size 的值生成一个 batch 的数据。

    torch.utils.data.DataLoader(datasetbatch_size=1shuffle=Falsesampler=Nonebatch_sampler=Nonenum_workers=0collate_fn=Nonepin_memory=Falsedrop_last=Falsetimeout=0worker_init_fn=Nonemultiprocessing_context=None)

    Data loader. Combines a dataset and a sampler, and provides an iterable over the given dataset.

    The DataLoader supports both map-style and iterable-style datasets with single- or multi-process loading, customizing loading order and optional automatic batching (collation) and memory pinning.

    See torch.utils.data documentation page for more details.

    参数说明

    __init__(构造函数)中的几个重要的属性[3]:
    1、dataset:(数据类型 dataset)
    输入的数据类型。看名字感觉就像是数据库,C#里面也有dataset类,理论上应该还有下一级的datatable。这应当是原始数据的输入。PyTorch内也有这种数据结构。这里先不管,估计和C#的类似,这里只需要知道是输入数据类型是dataset就可以了。
    2、batch_size:(数据类型 int)
    每次输入数据的行数,默认为1。PyTorch训练模型时调用数据不是一行一行进行的(这样太没效率),而是一捆一捆来的。这里就是定义每次喂给神经网络多少行数据,如果设置成1,那就是一行一行进行(PyTorch默认设置是1)。
    3、shuffle:(数据类型 bool)
    洗牌。默认设置为False。在每次迭代训练时是否将数据洗牌,默认设置是False。将输入数据的顺序打乱,是为了使数据更有独立性,但如果数据是有序列特征的,就不要设置成True了。
    4、collate_fn:(数据类型 callable,没见过的类型)
    将一小段数据合并成数据列表,默认设置是False。如果设置成True,系统会在返回前会将张量数据(Tensors)复制到CUDA内存中。(不解,就暂时默认False)
    5、batch_sampler:(数据类型 Sampler)
    批量采样,默认设置为None。但每次返回的是一批数据的索引(不是数据)。其和batch_size、shuffle 、sampler and drop_last参数是不兼容的。我想,应该是每次输入网络的数据是随机采样模式,这样能使数据更具有独立性质。所以,它和一捆一捆按顺序输入,数据洗牌,数据采样,等模式是不兼容的。
    6、sampler:(数据类型 Sampler)
    采样,默认设置为None。根据定义的策略从数据集中采样输入。如果定义采样规则,则洗牌(shuffle)设置必须为False。
    7、num_workers:(数据类型 Int)
    工作者数量,默认是0。使用多少个子进程来导入数据。设置为0,就是使用主进程来导入数据。注意:这个数字必须是大于等于0的,负数估计会出错。
    8、pin_memory:(数据类型 bool)
    内存寄存,默认为False。在数据返回前,是否将数据复制到CUDA内存中。
    9、drop_last:(数据类型 bool)
    丢弃最后数据,默认为False。设置了 batch_size 的数目后,最后一批数据的大小未必是设置的批大小,有可能会小些。这时你是否需要丢弃这批数据。
    10、timeout:(数据类型 numeric)
    超时,默认为0。是用来设置数据读取的超时时间的,超过这个时间还没读取到数据的话就会报错。 所以,数值必须大于等于0。
    11、worker_init_fn(数据类型 callable ?)
    子进程导入模式,默认为None。在数据导入前和步长结束后,根据工作子进程的ID逐个按顺序导入数据。(线程数目)
    12、multiprocessing_context=None    【暂时不解】

    与Dataset

    Dataset是一个包装类,可对数据进行张量(tensor)的封装,其可作为DataLoader的参数传入,进一步实现基于tensor的数据预处理。

    参考

    [1] pytorch:https://github.com/pytorch/pytorch

    [2] dataloader:https://pytorch.org/docs/stable/_modules/torch/utils/data/dataloader.html

    [3] https://blog.csdn.net/rogerfang/article/details/82291464

  • 相关阅读:
    [dubbo实战] dubbo+zookeeper伪集群搭建 (转)
    [Dubbo实战]dubbo + zookeeper + spring 实战 (转)
    DUBBO本地搭建及小案例 (转)
    【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(转)
    Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
    【Quartz】Quartz的搭建、应用(单独使用Quartz)
    Javascript判断Crontab表达式是否合法
    给Java程序员的几条建议
    使用maven编译Java项目
    使用Docker运行Java Web应用
  • 原文地址:https://www.cnblogs.com/ytxwzqin/p/12011624.html
Copyright © 2020-2023  润新知