使用Ptorch中的DataLoader加载自己的图片数据集以及简单的处理

文章目录

    • 原理介绍
    • 数据集类的创建
    • 数据的简单处理
    • 生成dataloader

在图像处理中,我们得到的数据往往是一张张的图片数据而不是已经处理好的数据,现使用一种利用torch.utils中的DataLoader模块来加载图片数据,并且生成dataset来分批训练的方法。

原理介绍

pytorch包里提供了DataLoader与Dataset来对数据进行加载与分批,下面我们将定义一个类来进行数据集的加载:

//导入所需的库与函数
from torch.utils.Data import DataLoader,Dataset
import torchvision.transforms as transforms   //转换图片的方法
import pandas as pd
import cv2    //读取图片
import os     //生成图片的路径

数据集类的创建

train_hd=pd.read_csv('E:\\360downloads\\name.csv')//获取图片的名字我的csv文件储存在这里
train_path='E:\\360downloads\\train'              //获取图片的路径(只需要读取到储存图片的文件夹就行了)
class Mydataset(torch.utils.Data):
    def __init__(self,df_data,data_dir='./',transform=None):
        super().__init__()
        self.df=df_data.values
        self.data_dir=data_dir
        self.transforms=transforms
    def __len__(self):
        return len(self.df)
    def __getiem__(self,idex):
        img_name,label=self.df[idex]
        img_path=os.path.join(self.data_dir,img_name)
        image=cv2.imread(img_path)
        if self.transform is not None:
            image=self.transform(image)
        return image,label                   //返回数据的标签与加载的数据。
        

__len__这样就可以len(dataset)返回数据集的大小。
__getitem__支持索引,以便dataset[i]可以用来获取i样本

数据的简单处理

此时的图片数据还没有进行标准化(便于梯度下降)以及增加噪声(增加噪声的目的是让训练出得模型鲁棒性更好),现利用transforms.Compose来整合处理图像数据的步骤:

transforms_train=transforms.Compose([
    transforms.ToPILImage(),             
    transforms.RandomHorizontalFlip(),   //水平翻转
    transforms.RandomRotation(10),       //随机旋转10度
    transforms.ToTensor(),               //将数据转换成Tensor型
    transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])   //标准化

更多transforms函数
在机器学习中,我们经常将数据分批次训练,以节省内存,有时当数据数量巨大时,也需要分批次训练或者测试,DataLoader是torch中提供的一个便捷的生成批次数据的方法。

生成dataloader

train_data=MyDataset(train_hd,train_path,transform=transforms_train)
BATCH_SIZE=64
train_loader=DataLoader(train_data,batch_size=BATCH_SIZE,shuffer=True)

更多DataLoader参数 。
有了DataLoader,我们便可以将自己的图片数据输入神经网络中训练模型,也可以借此生成自己的训练集与验证集。

你可能感兴趣的:(torch,数据处理,生成数据集,图片数据处理)