博客
关于我
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/

    你可能感兴趣的文章
    python中列表 元组 字典 集合的区别
    查看>>
    python struct 官方文档
    查看>>
    Android DEX加固方案与原理
    查看>>
    Android Retrofit2.0 上传单张图片和多张图片
    查看>>
    iOS_Runtime3_动态添加方法
    查看>>
    Leetcode第557题---翻转字符串中的单词
    查看>>
    Problem G. The Stones Game【取石子博弈 & 思维】
    查看>>
    Unable to execute dex: Multiple dex files
    查看>>
    Java多线程
    查看>>
    Unity监听日记
    查看>>
    AndroidStudio跳到错误位置
    查看>>
    openssl服务器证书操作
    查看>>
    expect 模拟交互 ftp 上传文件到指定目录下
    查看>>
    linux系统下双屏显示
    查看>>
    PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
    查看>>
    我用wxPython搭建GUI量化系统之最小架构的运行
    查看>>
    我用wxPython搭建GUI量化系统之多只股票走势对比界面
    查看>>
    selenium+python之切换窗口
    查看>>
    重载和重写的区别:
    查看>>
    搭建Vue项目步骤
    查看>>