博客
关于我
PyTorch学习笔记——(6)数据加载Dataset和DataLoader的使用
阅读量:588 次
发布时间:2019-03-12

本文共 1880 字,大约阅读时间需要 6 分钟。

PyTorch 数据集与数据加载器详解

在深度学习项目中,数据处理是至关重要的一环。而随着深度学习模型复杂度的不断提升,训练数据量日益膨胀。直接处理海量数据往往会面临内存不足及计算速度受限的问题。因此,如何高效地加载与处理数据成为开发者关注的重点。

数据集类(Dataset Class):基石性质

在PyTorch中,数据集的处理从核心库torch.utils.data.Dataset开始。这个基类为创建自定义数据集提供了基础框架。具体来说,开发者需要实现两个核心方法:

  • __len__():返回数据集的长度,用于确定数据的总数。
  • __getitem__():通过索引获取对应位置的单个数据样本。
  • 通过继承Dataset类并实现上述两种方法,可以快速实现读取和处理数据的功能。例如:

    import pandas as pdfrom torch.utils.data import Datasetclass MyDataset(Dataset):    def __init__(self):        self dataSet = pd.read_csv("./data/wendu_8_4_9_2.csv").values        def __getitem__(self, index):        return selfDataSetToTensor(selfDataSet[index])        def __len__(self):        return len(selfDataSet)        @staticmethod    def toTensor(data):        return torch.from_numpy(data)

    这个例子展示了如何将CSV文件数据加载到PyTorch环境中。通过MyDSataset类,可以依据索引加载对应位置的数据,同时数据通过toTensor()方法转换为PyTorch张量形式。

    数据迭代器(DataLoader):批量处理与多线程加载

    在原始数据集中类方法中得到数据加载能力后,如何实现批量处理和数据打乱成为关键。PyTorch中的DataLoader充当了这个角色,功能包涵包括:

    • 批量处理:根据指定批量大小,将数据按块读取。
    • 随机打乱:在每次加载前对数据进行随机打乱。
    • 多线程加载:开启内置线程池以加速数据读取过程。
    • 数据切片:则数据末尾不足一个批量时自动删减或补充以达到批量大小。

    DataLoader的使用示例如下:

    from torch.utils.data import DataLoaderimport pandas as pdimport torchdataSet =MyDataset() # 实例化自定义数据集# 指定数据加载参数dataLoader = DataLoader(    dataSet=dataSet,    batch_size=32,    shuffle=True,    num_workers=2)for batch in dataLoader:    print(batch)    print('*' * 50)

    DataLoader的各参数含义:

  • dataset:传入需要加载的数据集实例。
  • batch_size:设置一次装载的数据样本数,常取值如32、64、128等。
  • shuffle:布尔标志,表示每个批次内部是否打乱数据顺序。
  • num_workers:启动数据加载的线程数量,默认为0(即单线程)。
  • drop_last:默认为False,当最后一个批次样本不足时是否剪裁。
  • 此外,DataLoader生成的迭代器返回形式为 batches(批),其中每个batches是形状相同的张量序列,适于通过模型进行训练或推理操作。

    注意事项与性能优化

    在使用DataLoader时,需要注意以下几点:

  • 批量大小选择:选择合适的批量大小既保持内存效率,又能保证训练流程的连贯性。通常情况下,较大的批量尺寸可以提高训练速度,但需要确保电脑内存资源充足。

  • 数据随机打乱:为了防止模型出现训练数据泄漏等问题,建议在加载过程中对数据进行打乱。

  • 多线程读取:根据硬件配置合理设置num_workers,提升数据读取效率。

  • 处理尾端数据:若数据集中存在不完整批次,可通过drop_last参数选择是否删除末尾不足的样本。

  • 通过合理配置DataLoader,能显著提升数据加载效率,同时确保数据的多样性和训练模型的鲁棒性。

    转载地址:http://jqetz.baihongyu.com/

    你可能感兴趣的文章
    js传入参数是中文的时候出现 “******”未定义错误
    查看>>
    吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)
    查看>>
    pair的用法
    查看>>
    SQL基本操作命令
    查看>>
    C# WinForm程序退出的方法
    查看>>
    onFailure unexpected end of stream
    查看>>
    Flex 布局的自适应子项内容过长导致其被撑大问题
    查看>>
    PL/SQL 动态Sql拼接where条件
    查看>>
    Lua-table 一种更少访问的安全取值方式
    查看>>
    虚函数
    查看>>
    Error:Cannot read packageName from AndroidManifest.xml
    查看>>
    斐波那契数列两种算法的时间复杂度
    查看>>
    【自学Flutter】4.1 Material Design字体图标的使用(icon)
    查看>>
    C++清空队列(queue)方法
    查看>>
    【换行符】什么时候用cin.get()吃掉输入流中的换行符
    查看>>
    【二叉树】已知后序与中序求先序
    查看>>
    解决Nginx 404 not found问题
    查看>>
    广东外语外贸大学第三届网络安全大赛Writeup
    查看>>
    VS2019 报错: LINK Error 无法找到 MSCOREE.lib的解决办法
    查看>>
    hadoop 分布式文件系统的计算和高可用
    查看>>