批处理数据Dataset+DataLoader使用介绍【Pytorch】

写在前面 {\color{Purple}写在前面} 写在前面

由于我们使用的数据可能是多且杂乱的,为了更有效的处理数据同时也方便之后的使用,Pytorch提供了Dataset和DataLoader来帮助我们批量处理数据。


各自的作用 {\color{Purple}各自的作用} 各自的作用

∙ \bullet Dataset:主要实现按索引访问对应的数据以及标签
∙ \bullet DataLoader:主要将数据划分batch方便之后训练


引入相应的库 {\color{Purple}引入相应的库} 引入相应的库

import torch
from torch.utils.data import Dataset
from torch.utils.data import DataLoader

使用 D a t a s e t {\color{Purple}使用Dataset} 使用Dataset

自定义实现 {\color{Purple}自定义实现} 自定义实现

∙ \bullet 主要包含三个函数:__init__, __len__, __getitem__.

函数功能
init初始化函数,为自定义类设置成员变量
len返回样本个数
getitem核心函数,实现按索引返回数据及标签

∙ \bullet 代码实现 (简洁版:以图像数据为例)

#继承Dataset类,实现自己的tensorDataset类
class tensorDataset(Dataset):
    '''
    Inputs:
    - images: a [Batch size, Channels, Height, Width] tensor
    - labels: a 1-dimensional tensor corresponding to image labels
    '''
    
    def __init__(self, images, labels, train:bool):
    
        #灰度图,将像素压缩到0~1之间
        self.images = images/255
        self.labels = labels
        
    #魔法方法,实例化对象后,可以支持下标索引,通过下标来读取对应的图片像素与标签
    def __getitem__(self, index):
    
        # Load the image (as tensor)
        img  = self.images[index]
        label = self.labels[index]
        
        return img, label

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

使用 D a t a L o a d e r {\color{Purple}使用DataLoader} 使用DataLoader

快速使用 {\color{Purple}快速使用} 快速使用

∙ \bullet 其中batch_size表示按多少个样本进行一次划分,shuffle表示是否打乱划分
∙ \bullet 比如有1、2、3、4四个样本,batch_size取2,当shuffle = false时,就一定会划分为(1,2)和(3,4);而shuffle = true时,就是划分为任意组合

train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)
自定义实现 {\color{Purple}自定义实现} 自定义实现

可以结合自定义的Dataset一起使用

def create_dataloaders(batch_size, X_train, y_train, X_val, y_val, X_test=None, y_test=None):

	#先使用Dataset进行数据处理
    train_dataset = tensorDataset(X_train, y_train, train=True)
    val_dataset   = tensorDataset(X_val, y_val, train=False)

	#使用Dataloader进行处理,得到训练集和验证集的dataloader
    train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
    val_dataloader   = DataLoader(val_dataset  , batch_size=batch_size, shuffle=False)
	
	#自定义是否也处理测试集
    if X_test is not None:
        test_dataset  = tensorDataset(X_test, y_test, train=False)
        test_dataloader  = DataLoader(test_dataset , batch_size=batch_size, shuffle=False)
        return train_dataloader, val_dataloader, test_dataloader
    
    return train_dataloader, val_dataloader
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
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格式的数据集。这三个工具的配合使用可以使得数据处理变得更加方便和高效。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

比奇堡咻飞兜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值