pytorch数据读取之理解dataloader和dataset

DataLoader和Dataset是pytorch中数据读取的核心

能够将自己的科研数据输入到模型当中是进行研究的最初的一步也是最重要的一步

一、torch.utils.data.Dataset
该类是用来定义数据从哪里读取,以及如何读取的问题。
在使用该类时,需要先继承该类。
那么具体如何读取,需要复写其中的方法

__getitem__() # 最为重要, 即每次怎么读数据,接受一个item索引,返回该索引的样本
__len__() #len()返回值的是常数

具体的类的实现如下:

class MyDataSet(Dataset):
    def __init__(self, graphs, labels):
        self.graphs = graphs
        self.labels = labels

    def __len__(self):
        ##返回数据的长度
        return len(self.labels)

    def __getitem__(self, item):
        # __getitem__函数的作用是根据索引index遍历数据
        #loc是根据index来索引对应的行
        graph = graphs[item]
        g = self.labels[item]

        return [graph, g]

二. torch.utils.data.DataLoader

构建可迭代的数据装载器, 我们在训练的时候,由于数据量太大,内存吃不消需要分批次送入模型当中。
每一个for循环,每一次iteration,就是从DataLoader中获取一个batch_size大小的数据的。

class torch.utils.data.DataLoader(dataset, 
                                  batch_size=1, 
                                  shuffle=False, 
                                  sampler=None, 
                                  batch_sampler=None, 
                                  num_workers=0, 
                                  collate_fn=<function default_collate>, 
                                  pin_memory=False, 
                                  drop_last=False)

参数很多,但需要关注的点就几个
dataset: Dataset类, 决定数据从哪读取以及如何读取
bathsize: 批大小
num_works: 是否多进程读取机制(参与工作的线程数)
shuffle: 每个epoch是否乱序(取batch是否随机取, 默认为False)
drop_last: 当样本数不能被batchsize整除时, 是否舍弃最后一批数据
collate_fn:对取出的batch进行处理(有时候根据需求需要自己定义) 下面详细讲该参数

三、dataloader之collate_fn

dataloader=DataLoader(dataset,batch_size=2)

batch_size=2即一个batch里面会有2个数据。我们以第1个batch为例,DataLoader会根据dataset取出前2个数据,然后弄成一个列表:

batch=[dataset[0],dataset[1]]

然后将上面这个batch作为参数交给collate_fn这个函数进行进一步整理数据,然后得到real_batch,作为返回值。如果你不指定这个函数是什么,那么会调用pytorch内部的collate_fn(将列表转化成tensor)。
定义其实很容易上手

def my_collate(batch):#batch上面说过,是dataloader传进来的。
	graphs, labels = map(list, zip(*bathc))
	real_batch=***
	return real_batch

其中的real_batch= *** 写成你要的操作即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch中,数据读取是构建深度学习模型的重要一环。为了高效处理大规模数据集,PyTorch提供了三个主要的工具:DatasetDataLoader和TensorDatasetDataset是一个抽象类,用于自定义数据集。我们可以继承Dataset类,并重写其中的__len__和__getitem__方法来实现自己的数据加载逻辑。__len__方法返回数据集的大小,而__getitem__方法根据给定的索引返回样本和对应的标签。通过自定义Dataset类,我们可以灵活地处理各种类型的数据集。 DataLoader数据加载器,用于对数据集进行批量加载。它接收一个Dataset对象作为输入,并可以定义一些参数例如批量大小、是否乱序等。DataLoader能够自动将数据集划分为小批次,将数据转换为Tensor形式,然后通过迭代器的方式供模型训练使用。DataLoader数据准备和模型训练的过程中起到了桥梁作用。 TensorDataset是一个继承自Dataset的类,在构造时将输入数据和目标数据封装成Tensor。通过TensorDataset,我们可以方便地处理Tensor格式的数据集。TensorDataset可以将多个Tensor按行对齐,即将第i个样本从各个Tensor中取出,构成一个新的Tensor作为数据集的一部分。这对于处理多输入或者多标签的情况非常有用。 总结来说,Dataset提供了自定义数据集的接口,DataLoader提供了批量加载数据集的能力,而TensorDataset则使得我们可以方便地处理Tensor格式的数据集。这三个工具的配合使用可以使得数据处理变得更加方便和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值