深度学习零基础学习之路——第二章 数据处理Dataset类的使用

Python深度学习入门

第一章 Python深度学习入门之环境软件配置
第二章 Python深度学习入门之数据处理Dataset的使用
第三章 数据可视化TensorBoard和TochVision的使用
第四章 UNet-Family中Unet、Unet++和Unet3+的简介
第五章 个人数据集的制作



前言

  面对大数据时代,数据处理的能力尤为重要,深度学习换句话可以被称作是学习数据,因为大部分深度学习模型需要大量的数据来训练,数据量越大训练出来的模型也就越精准。由此可见数据在深度学习中的地位了,本文我们就学习一下如何处理数据。


一、数据处理的工具

  在Pytorch中有两个包用来做数据处理非常合适,就是DataSet和DataLoad。这两个包的作用可以用下面这张图片展示出来。在这里插入图片描述

  1. DataSet:是将杂乱无章的数据整理成有顺序,带标签的数据,并提供访问数据的方式方法,如:获取某条数据、查询数据总数等等。
  2. DataLoad:是将数据打包,根据需要对数据进行封装,增加访问数据的方式方法。

二、DataSet的学习

1.准备数据集

蚂蚁和蜜蜂图像数据集下载地址:https://download.pytorch.org/tutorial/hymenoptera_data.zip

通过以上链接我们可以下载到接下来我们要用到的蚂蚁和蜜蜂数据集。

在这里插入图片描述

2.知识储备学习

  在学习DataSet之前我们需要学习一个对文件操作的包,即python的os包。这是一个对系统文件操作的包,因为我们要经常对数据进行操作,数据集又放在文件夹里,所以这个包是非常重要的。

2.1 os包

  os包里面的内容十分丰富,在这里我只说一下常用的和接下来我们需要使用的一些方法。

  • os.getcwd():获取当前所在文件夹的路径
import os

current_path = os.getcwd()
print(current_path)

在这里插入图片描述

  • os.listdir():返回指定路径下所有的文件夹和文件,并且其返回的是一个列表list
import os

root_dir = "C:/"
list_dir = os.listdir(root_dir)
print(list_dir)

在这里插入图片描述

  • os.path.join(path1, path2):  将path1和path2的路径用“//”连接起来。
  • os.exists():         判断文件或者路径是否存在

2.2 DataSet类

  通过查看源码我们可以知道Dataset类是一个抽象类,因此根据面向对象的概念,我们需要继承抽象类并重写抽象类里面的抽象方法。
在这里插入图片描述
  对于Dataset中的抽象方法中,我们这边主要是重写__getitem__方法。其中index是数据的下标,通过下标来访问具体的项。

3、数据处理实战(蚂蚁和蜜蜂数据集)

需要解决的问题:

  • 1、加载指定文件夹下的图片数据
  • 2、根据角标获取某条数据的信息
  • 3、给数据内容添加label标签信息

3.1、继承Dataset类

from torch.utils.data import Dataset
from PIL import Image
import os

class MyData(Dataset):
    def __init__(self, root_dir, label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir)
        self.image_path = os.listdir(self.path)

    def __getitem__(self, item):
        image_name = self.image_path[item]
        image_item_path = os.path.join(self.root_dir, self.label_dir, image_name)
        image = Image.open(image_item_path)
        label = self.label_dir
        return image, label

    def __len__(self):
        return len(self.image_path)
  1. 这里我们构建一个MyData类,继承Dataset,然后创建构造函数(参数1为根目录路径,参数2为要处理的文件夹的名称),通过os.path.join来连接两个路径构成一个完整的数据集路径,最后通过os.listdir()来打开文件夹下的所有文件。
  2. 通过步骤1我们获取到了所有文件信息列表,然后我们就可以通过图片处理方法来获取图片的具体信息,并将图片和标签返回。
  3. 因为我们已知数据列表,很容易就可以得到数据集的长度。

3.2 实战测试

if __name__ == '__main__':
    root_dir = 'H:\\learn\\hymenoptera_data\\train'
    ants_label_dir = 'ants'
    bees_label_dir = 'bees'
    ants_dataset = MyData(root_dir=root_dir, label_dir=ants_label_dir)
    bees_dataset = MyData(root_dir=root_dir, label_dir=bees_label_dir)
    img, label = bees_dataset[0]
    print(img)
    img.show()
    print(label)

  运行之后代码之后,会将获取到的图片打开,并且在控制台输出图片信息。
在这里插入图片描述

总结

  以上就是数据处理中使用Dataset类来对数据进行管理,本文仅仅简单介绍了对Dataset的使用,而Dataset中还提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值