Pytorch深度学习入门基础(三):python 加载数据初认识

目录

 一、 导入

二、数据集中数据和 label 的组成形式

三、 Dataset 读入数据

四、Dataset 类代码实战

4.1 创建函数

4.2  设置初始化函数

4.3 读取每一个图片

4.4 设置获取数据长度函数

4.5 创建实例

4.5.1 单个图片数据集

4.5.2 多个图片数据集


       现在来开一个专栏,关于学习Pytorch深度学习的入门基础,分为好几期,我会慢慢更新,希望大家可以互相支持一下,相互学习,相互进步!下面是这个专栏的所有内容,大家可以点击下面链接跳转,我会持续更新。

Pytorch深度学习入门基础(一):环境安装配置anaconda安装及pytorch安装icon-default.png?t=N7T8https://blog.csdn.net/weixin_51971381/article/details/141034980?spm=1001.2014.3001.5501Pytorch深度学习入门基础(二):python 编辑器的选择、 安装及配置( pycharm、 jupyter)icon-default.png?t=N7T8https://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,本期分享就到这,下一期我们继续讲解。感谢大家的阅读本文,接下来我还会持续学习并且分享更多的学习经验哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕奕宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值