Dataset和DataLoader基本使用方法与数据集切分函数

       在PyTorch中,操作数据所需要使用的模块是torch.utils,其中utils.data类下面有大量用来执行数据预处理的工具。在MBSGD中,我们需要将数据划分为许多组特征张量+对应标签的形式,因此最开始我们要将数据的特征张量与标签打包成一个对象。深度学习中的特征张量与标签几乎总是分开的,不像机器学习中标签常常出现在特征矩阵的最后一列或第一列。

      合并张量与标签,我们所使用的类是utils.data.TensorDataset,这个功能类似于utils.data.TensorDataset,这个功能类似于python中的zip,可以将最外面的维度一致的tensor进行打包,也就是将第一维度一致的tensor进行打包。

      当我们将数据打包成一个对象之后,我们需要使用划分小批量的功能DataLoader。DataLoader是处理训练前专用的功能,它可以接受任意形式的数组、张量作为输入,并把他们一次性转换为神经网络可以接入的tensor。

       PyTorch中所有的数据都是Dataset的子类,换而言之就是在使用PyTorch建模训练数据时,需要创建一个和数据集对应的类来表示该数据集。

一、数据读取方法

1)使用TensorDataset这个简单的类型转化函数,将数据统一转化为”TensorDataset"类然后带入模型进行计算。但TensorDataset其实使用面较窄,最直接的限制就是该函数只能将张量类型转化为TensorDataset类。

2)更加通用的数据读取方式则是手动创建一个继承自torch.utils.data.dataset的数据类,用来作为当前数据的表述,如下面的乳腺癌数据的读取方式。

                  

       接下来,创建一个用于表示该数据集的Dataset的子类,在创建Dataset的子类过程中,必须要重写getitem方法和len方法,其中getitem方法返回输入索引后对应的特征和标签,而len方法则返回数据集的总数据个数。在必须要进行的init初始化过程中,我们也可以输入可代表数据集基本属性的相关内容,包括数据集的特征、标签、大小等等,视情况而定。

       然后,我们可以使用random_split方法对其进行切分。PyTorch的torch.utils.data中,提供了random_split函数可用于数据集切分

       此时切分的结果是一个映射式的对象,只有dataset和indices两个属性,其中dataset属性用于查看原数据集对象,indices属性用于查看切分后数据集的每一条数据的index(序号)。

二、DatasetLoader进行数据加载

       Dataset类主要负责数据类的生成,在PyTorch中,所有数据集都是Dataset的子类;而DatasetLoader类则是加载模型训练的接口。DataLoader进行数据转化,将一般数据状态转化为“可建模”的状态。所谓“可建模”状态,指的是经过DataLoader处理的数据,不仅包含数据原始的数据信息,还包含数据处理方法信息,如调用几个线程进行训练、分多少批次等,DataLoader常用参数如下:

 

 【小结DatasetDatasetLoader及数据集切分的基本使用流程如下

   

  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
datasetdataloader是在深度学习中常用的数据处理工具。 Dataset是一个抽象类,用于表示数据集。在使用时,我们可以继承该类并实现自己的数据加载逻辑。通常情况下,我们需要重写`__len__`方法返回数据集大小,以及`__getitem__`方法根据索引返回对应的样本数据。 Dataloader是一个用于批量加载数据的迭代器。它接收一个Dataset对象作为输入,并提供一些参数用于配置数据加载的行为。通过调用dataloader的`__iter__`方法,我们可以得到一个可迭代的对象,每次迭代返回一个批次的数据。 下面是一个简单示例,展示了如何使用datasetdataloader加载数据: ```python import torch from torch.utils.data import Dataset, DataLoader class MyDataset(Dataset): def __init__(self, data): self.data = data def __len__(self): return len(self.data) def __getitem__(self, index): return self.data[index] data = [1, 2, 3, 4, 5] dataset = MyDataset(data) dataloader = DataLoader(dataset, batch_size=2, shuffle=True) for batch in dataloader: # 在这里进行模型训练或推断 print(batch) ``` 在上面的示例中,我们首先定义了一个自定义的Dataset类`MyDataset`,并实现了必要的方法。然后我们创建了一个dataset对象并传入了我们的数据。接下来,我们创建了一个dataloader对象,并指定了一些参数,例如批大小和是否打乱数据等。最后,我们使用for循环迭代dataloader,每次迭代得到一个batch的数据,可以用于模型的训练或推断。 通过使用datasetdataloader,我们可以更方便地处理和加载数据,从而提高模型训练和推断的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L_bloomer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值