Python深度学习入门
第一章 Python深度学习入门之环境软件配置
第二章 Python深度学习入门之数据处理Dataset的使用
第三章 数据可视化TensorBoard和TochVision的使用
第四章 UNet-Family中Unet、Unet++和Unet3+的简介
第五章 个人数据集的制作
数据处理Dataset类的使用
前言
面对大数据时代,数据处理的能力尤为重要,深度学习换句话可以被称作是学习数据,因为大部分深度学习模型需要大量的数据来训练,数据量越大训练出来的模型也就越精准。由此可见数据在深度学习中的地位了,本文我们就学习一下如何处理数据。
一、数据处理的工具
在Pytorch中有两个包用来做数据处理非常合适,就是DataSet和DataLoad。这两个包的作用可以用下面这张图片展示出来。
- DataSet:是将杂乱无章的数据整理成有顺序,带标签的数据,并提供访问数据的方式方法,如:获取某条数据、查询数据总数等等。
- 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)
- 这里我们构建一个MyData类,继承Dataset,然后创建构造函数(参数1为根目录路径,参数2为要处理的文件夹的名称),通过os.path.join来连接两个路径构成一个完整的数据集路径,最后通过os.listdir()来打开文件夹下的所有文件。
- 通过步骤1我们获取到了所有文件信息列表,然后我们就可以通过图片处理方法来获取图片的具体信息,并将图片和标签返回。
- 因为我们已知数据列表,很容易就可以得到数据集的长度。
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中还提供了大量能使我们快速便捷地处理数据的函数和方法。