目录
现在来开一个专栏,关于学习Pytorch深度学习的入门基础,分为好几期,我会慢慢更新,希望大家可以互相支持一下,相互学习,相互进步!下面是这个专栏的所有内容,大家可以点击下面链接跳转,我会持续更新。
Pytorch深度学习入门基础(一):环境安装配置anaconda安装及pytorch安装https://blog.csdn.net/weixin_51971381/article/details/141034980?spm=1001.2014.3001.5501Pytorch深度学习入门基础(二):python 编辑器的选择、 安装及配置( pycharm、 jupyter)https://blog.csdn.net/weixin_51971381/article/details/141048774 这一节我们来讲一下数据加载,在神经网络深度学习当中,加载数据集是训练模型的第一步,我们需要讲数据集加载进来进而来实现后面学习的过程。
一、 导入
假设我们有一堆垃圾, 我们想对这些垃圾进行分类处理, 这里我们引进一个Dataset, 它可以用来将垃圾进行分类, 并且对垃圾进行编号, 其次还可以获取垃圾对应的 label, 也就是可以提供一种方式去获取数据及其 label。
除此之外,我们还需要把分类好的垃圾送进一个网络里面训练, 我们不会选择一个一个垃圾放进去训练, 我们会选择将一些垃圾打包送进网络里面, 这里我们就引一个 Dataloader, 为后面的网络提供不同的数据形式。
二、数据集中数据和 label 的组成形式
接下来我们来实践一下, 我们先下载好一个数据集, 如下图所示, 在 train文件夹里面有两个物体的图片分别是 ants 和 bees, 每个文件夹里面的都说该文件夹名称对应的小动物, 因此, 在这里我们可以把图片当成数据, 把文件夹的名字当成数据对应的 label。
还有另外的一种数据集文件的形式, 如下图所示, 训练的图片都在同一个文件夹里面( train_images) , 而训练图片对应的标签是在另外一个文件夹里面( train_labels)。
三、 Dataset 读入数据
首先我们先创建一个文件: read_data.py
from torch.utils.data import Dataset
从这句代码中表示的是从torch的常用工具区( utils) 的关于数据区( data) 导入 Dataset。------也就是导入一个库。
四、Dataset 类代码实战
4.1 创建函数
①先创建一个 MyData 的类, 在类里面继承 Dataset, 然后在里面先进行初始化, 就是为了创建的 class 类里面的全局变量。
②接下来我们重写 getitem 函数, 函数的参数 idx 表示的是图片的序号, 在这个函数里面我们需要用 opencv 或者从 PIL 导入 Image 来进行读取图片的绝对路径。
然后我们将数据集放到项目相同的路径下
接下来我们在 python 控制台来使用一下 Image 读取图片
接下来如果我们要获取到所有图片的地址, 这里我们导入 os 包, 我们在将使用文件夹的相对地址, 并且将文件夹下的图片名称全部转换成一个列表, 如下图所示:
4.2 设置初始化函数
①我们在初始化函数当中, 设置两个参数, 第一个是 root_dir 表示的是文件夹的路径, 第二个是 label_dir, 表示的是图片的 label。
在这里我们在介绍一下 os 的 join 函数, 如下图所示, 我们的 train 文件夹下有两个子文件夹, 分别是 ants 和 bees
然后我们创建 root_dir 为 train 文件夹的相对路径, 把 label_dir 设置为子文件夹的名称, 接下来我们在使用 os.path.join()函数, 就可以实现将 root_dir 和label_dir 进行加起来, 实现获得 ants 或者 bees 的相对路径。 如下图所示:
②我们在初始化当中写入全局变量, 一般在初始化函数当中我们会使用 self, 它的作用是可以把 self 指定的变量给后面的变量使用, 相当于指定了该 class 里的全局变量, 这样在该 class 下的函数都是可以使用的。
在该部分我们设置全局变量 root_dir 和 label_dir, 并且设置全局变量 path,该变量是使用 os.path.join()将 root_dir 和 label_dir 合并在一起的路径。
除此之外我们还需要获取所有图片名称返回来的列表, 因此我们设置全局变量 img_path, 该变量使用 os.listdir()来获取。
4.3 读取每一个图片
我们设置 img_name 变量, 该变量从全局变量 self.img_path 中, 通过索引( idx)获取图片的名称
接下来我们将通过 os.path.join()函数将图片的相对路径给构建出来
我们来通过 python 控制台来演示一下: 设置 idx=0, 获取到第一张图片的相对路径, 如下图所示
最后我们进行读取图片, 通过使用 PIL 中的 Image 来读取, 如下图所示:
而在这个数据集当中, 文件夹名称就是我们的 labe, 而且在初始化当中我们已经设置了关于 label 的全局变量, 因此, 这里我们就直接把全局变量赋值给 label,最后这个函数我们需要返回 image 和 label, 如下图所示
4.4 设置获取数据长度函数
可以直接返回我们获取到图片路径的列表长度, 如下图所示:
4.5 创建实例
在我们调用前面使用的 class 的时候, pycharm 会自动告诉我们需要填写哪些参数。
4.5.1 单个图片数据集
由上图可知我们需要创建一个 root_dir 和 label_dir, 因此我们设置好参数后,如下图所示:
通过 python 控制台运行我们上方的所有代码, 可以发现我们创建的ant_dataset 调用的是 MyData, 因此会返回图片和 label 的信息:
4.5.2 多个图片数据集
上面我们只使用了 ants 数据集里面的图片, 接下来我们将 bees 的数据集图片也加进来:
我们将 ants 数据集和 bees 数据集合并成一个 train 训练集, 则可以直接相加,如下图所示:
如果我们需要通过窗口显示出图片, 可以使用以下代码, 我们以查看索引为1 的图片为例
OK,本期分享就到这,下一期我们继续讲解。感谢大家的阅读本文,接下来我还会持续学习并且分享更多的学习经验哦!
标签:python,label,Pytorch,文件夹,加载,数据,我们,dir,图片 From: https://blog.csdn.net/weixin_51971381/article/details/141060190