初学Pytorch(一)-自定义数据处理、加载

在使用Pytorch框架时,torchvision 里面的Dataset 已经包含了各种数据集,需要时可直接调用库函数即可。然而,对于一些自定义的数据集来说,需要自己去定义数据集对象,从而实现训练(测试)时加载数据的功能,一般将类命名为ImageFolder,并且需要实现两个方法。

__getitem__(),返回一个样本

__len() ,返回数据集的长度

1、接下来,通过一个例子,介绍如何处理数据。

data/samples文件夹下存储的是待处理数据,.jpg前面名字该图片中物体的种类,即Lable。

2、接下来,封装类及定义初始化方法,直接上代码

上面说过,root是指存储图片文件的文件夹,这里是‘data/samples’

初始化函数--init--,只是指定图片路径,选择要不要预处理。而self.files是一个列表,存储的是每个图片文件的路径名,如图所示

真正读取图片、数据预处理等操作是在--getitem--函数中,并返回一个处理好的样本

3、接下来,实例化对象,并加载数据

(1)预处理模式,这里需要注意的两点是:

由Cv2.imread读取的数据返回值是numpy,而在transform中的操作中,输入数据应该tensor类型的,所以首先需要将numpy数据转换成tensor,才能进行接下来的预处理操作

原始数据中,图片大小不一致,使用DataLoder方法时会出错,必须将所有数据resize成统一大小,才能使用dataloder迭代器

(2)实例化对象,预处理模式选择使用上图中定义的方式

首先,来看下实例化对象直接根据索引值访问数据的结果,返回的是一个元祖,内容分别表示图片的tensor数据与标签的内容

(3)然后,来看下通过迭代实例化对象,返回的结果

(4)在深度学习的训练过程中,需要将数据集按照batch_size分批次送入网络进行训练,这时可以通过Pytorch中提供的DataLoader方法,实现一个迭代器,每次返回一组包含batch_size个样本与标签

torch.utils.data.DataLoder(dataset,batch_size,shuffle,num_worker,drop_last),DataLoder是一个可迭代的数据装载器,组合了数据集与采样器,在给定数据集上提供可迭代对象。该函数中的参数众多,我只列了其中比较常用的部分:

  • dataset 数据集(可迭代对象),一般就是处理好的ImageFolder

  • batch_size 批处理最小数量

  • shuffle 每完成一个epoch,是否需要重新洗牌

  • num_worker 是否采用多进程读取机制

  • drop_last 当样本数不能被batch_size整除时,是否舍弃最后一个batch的数据

接下来,可以看看执行后的效果

可以看出,当指定batch_size的大小为2时,每次迭代返回的数据包含两个样本的数据与标签,最后一个批次只剩下一个样本时,并没有抛弃改样本

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值