pytorch:构建dataset和使用dataloader

pytorch:构建dataset和使用dataloader

在接触任务并使用深度学习方法的时候,我们首先处理的就是数据,对于数据的处理,我们有很多的方法,例如构建任务独有的dataset,使用dataloader得到batch数据大小的迭代器用于训练和测试等任务,使用sampler采样器或者自己定义特殊的采样器指导数据的组织形式,针对任务设计metrics评价指标……
这里,我们介绍基本的dataset的构建和dataloader的使用

所谓数据集,无非就是一组{x:y}的集合吗,你只需要在这个类里说明“有一组{x:y}的集合”就可以了。
对于图像分类任务,图像+分类
对于目标检测任务,图像+bbox、分类
对于超分辨率任务,低分辨率图像+超分辨率图像
对于文本分类任务,文本+分类

dataset的torch官方代码,其中__getitem__和__len__是子类必须继承的。

class Dataset(object):
    """An abstract class representing a Dataset.
    All other datasets should subclass it. All subclasses should override
    ``__len__``, that provides the size of the dataset, and ``__getitem__``,
    supporting integer indexing in range from 0 to len(self) exclusive.
    """
 
    def __getitem__(self, index):
        raise NotImplementedError
 
    def __len__(self):
        raise NotImplementedError
 
    def __add__(self, other):
        return ConcatDataset([self, other])

首先,__getitem__就是获取样本对,模型直接通过这一函数获得一对样本对{x:y}(注意要返回一个元组)。__len__是指数据集长度。
例如:

from torch.utils.data import Dataset
import pandas as pd

class myDataset(Dataset):
    def __init__(self,csv_file,txt_file,root_dir, other_file):
        self.csv_data = pd.read_csv(csv_file)
        with open(txt_file,'r') as f:
            data_list = f.readlines()
        self.txt_data = data_list
        self.root_dir = root_dir

    def __len__(self):
        return len(self.csv_data)

    def __gettime__(self,idx):
        data = (self.csv_data[idx],self.txt_data[idx])
        return data

注意,有时候我们可以直接在dataset部分将数据变为tensor格式,避免在后期训练的过程中重新处理数据,但是很多时候没必要这么做,因为数据并不是都是要直接使用用于训练的,例如在数值化知识图谱的任务中,存储的是用于实体和关系的索引。

tricks

1.一般在任务中我们先对数据进行读入,然后再process阶段使用各种途径生成需要使用的mask,attention,labelmask等,都存在dataset中,方便再训练过程中使用dataloader
2.为了方便得到不同的训练和组织数据,一般再nlp任务中会使用自定义的vocab字母表,实现的基本功能包括id和word、label的互相转换,对于word也可以用tokenizer实现编码,方便之后使用bert预训练模型得到结果,(tokenizer是一种非常好用的编码工具)然后再process阶段和最后的评估阶段实现标签的互换
3.对于不同的任务可能需要处理的东西很多,在参数传递的过程中可以定义为一个类实现参数传递,如果是一个元组意义不是记得很清楚。

dataloader

https://blog.csdn.net/zyq12345678/article/details/90268668
Dataset负责生产数据,DataLoader负责数据的分批(batch_size)、采样(sampler)、传输

主要参数

dataset(Dataset):
传入的数据集

batch_size(int, optional):
每个batch有多少个样本

shuffle(bool, optional):
在每个epoch开始的时候,对数据进行重新打乱

sampler(Sampler, optional):
自定义从数据集中取样本的策略,如果指定这个参数,那么shuffle必须为False

num_workers (int, optional):
这个参数决定了有几个进程来处理data loading。0意味着所有的数据都会被load进主进程。(默认为0)

collate_fn (callable, optional):
将一个list的sample组成一个mini-batch的函数

pin_memory (bool, optional):
如果设置为True,那么data loader将会在返回它们之前,将tensors拷贝到CUDA中的固定内存(CUDA pinned memory)中.

drop_last (bool, optional):
如果设置为True:这个是对最后的未完成的batch来说的,比如你的batch_size设置为64,而一个epoch只有100个样本,那么训练的时候后面的36个就被扔掉了…
如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点。

在training过程中将dataset放入即可

### 回答1: DatasetDataLoaderPyTorch 中用于加载和处理数据的两个主要组件。Dataset 用于从数据源中提取和加载数据DataLoader 则用于将数据转换为适合机器学习模型训练的格式。 ### 回答2: 在PyTorch中,DatasetDataLoader是用于处理和加载数据的两个重要类。 Dataset是一个抽象类,用于表示数据集对象。我们可以自定义Dataset子类来处理我们自己的数据集。通过继承Dataset类,我们需要实现两个主要方法: - __len__()方法:返回数据集的大小(样本数量) - __getitem__(idx)方法:返回索引为idx的样本数据 使用Dataset类的好处是可以统一处理训练集、验证集和测试集等不同的数据集,将数据进行一致的格式化和预处理。 DataLoader是一个实用工具,用于将Dataset对象加载成批量数据数据加载器可以根据指定的批大小、是否混洗样本和多线程加载等选项来提供高效的数据加载方式。DataLoader是一个可迭代对象,每次迭代返回一个批次的数据。我们可以通过循环遍历DataLoader对象来获取数据使用DataLoader可以实现以下功能: - 数据批处理:将数据集划分为批次,并且可以指定每个批次的大小。 - 数据混洗:可以通过设置shuffle选项来随机打乱数据集,以便更好地训练模型。 - 并行加载:可以通过设置num_workers选项来指定使用多少个子进程来加载数据,加速数据加载过程。 综上所述,DatasetDataLoaderPyTorch中用于处理和加载数据的两个重要类。Dataset用于表示数据集对象,我们可以自定义Dataset子类来处理我们自己的数据集。而DataLoader是一个实用工具,用于将Dataset对象加载成批量数据,提供高效的数据加载方式,支持数据批处理、数据混洗和并行加载等功能。 ### 回答3: 在pytorch中,Dataset是一个用来表示数据的抽象类,它封装了数据集的访问方式和数据的获取方法。Dataset类提供了读取、处理和转换数据的功能,可以灵活地处理各种类型的数据集,包括图像、语音、文本等。用户可以继承Dataset类并实现自己的数据集类,根据实际需求定制数据集。 Dataloader是一个用来加载数据的迭代器,它通过Dataset对象来获取数据,并按照指定的batch size进行分批处理。Dataloader可以实现多线程并行加载数据,提高数据读取效率。在训练模型时,通常将Dataset对象传入Dataloader进行数据加载,并通过循环遍历Dataloader来获取每个batch的数据进行训练。 DatasetDataloader通常配合使用Dataset用于数据的读取和预处理,Dataloader用于并行加载和分批处理数据使用DatasetDataloader的好处是可以轻松地处理大规模数据集,实现高效的数据加载和预处理。此外,DatasetDataloader还提供了数据打乱、重复采样、数据划分等功能,可以灵活地控制数据的访问和使用。 总之,DatasetDataloaderpytorch中重要的数据处理模块,它们提供了方便的接口和功能,用于加载、处理和管理数据集,为模型训练和评估提供了便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值