简单数据预处理、数据准备
思路与代码:
如果要进行机器学习或深度学习模型建模时,肯定是要有训练数据,但是这是数据往往不是直接就可以传给模型去训练的,需要经过批处理,让数据变成能让模型接受的参数。那模型都接受什么参数啊?就拿CNN来说,通常是三维的彩色图像,(即 宽 高 通道数)本章以三维图像输入为例。
首先,数据是从百度爬取的图片,5种水果每类水果为200多张,还算比较均匀

开始先创建一个各类型所对应llabel的字典,相当于做一个标签编码的字典,后面需要映射到txt文件中,为啥要映射到txt文件啊?因为最后肯定是从一个容器中读取图像的数据和它对应的标签传给神经网络啊。
创建完接着定义数据集根目录,一会儿读取文件什么的需要用到
然后定义在水果类型同级目录下的一两个train.txt、test.txt路径,因为一会儿要创建这两个文件。创建干嘛?用来存图片的路径和图片的标签啊
接着创建一个空字典,准备键为类别,值为图像的路径列表(这一类每一个图像的路径)
获取数据集根目录下的所有文件夹名字 给一个列表

6.遍历dirs中的内容,想获取水果各类型的文件夹名,用来做相关操作:
先把取出来的文件名(文件夹名)和根目录拼接成一个路径
判断这个文件是不是文件夹,因为只有存放图片数据的容器是文件夹。如果是文件夹
那么获取这个文件夹下的所有图像文件的文件名,用来做路径拼接。
拼接完路径后,传给一个函数来把这些数据添加到空字典中

这个函数要实现的功能:把类型作为键,所对应的所有图像路径(列表)作为值
到时候需要从里面读取写到txt中,为什么有字典还要写入txt文件后面读txt文件呢?方便划分训练集测试集、方便使用呗,如果只用字典还比较麻烦,当然也不是不行。
这里首先判断这个类型在不在这个字典里,如果不在,则创建一个空列表,空列表里添加传进来的路径,字典【键】=img_path_list来添加键值对。
如果字典中已经有这个类型了(说明肯定也有相应的list了),就直接添加到字典中就行了

7.创建两个空txt,用来存储每一个图像文件的路径和它对应的标签

因为现在还用不上,所以pass掉,只创建一个空文件
8.然后遍历字典,划分训练集和测试集到txt文件中
遍历字典,拿到类型名字和存有图像路径的列表,创建一个变量i,一会儿用来划分训练集测试集用。
遍历图像路径列表,,用来求余10看看是不是等于0,如果等于0则划分到测试集。打开刚才创建的空txt文件,格式以 【路径 类型】这样的格式存数,路劲和类型中有一个'\t'符号,当然可以用空格代替。
一定不要忘了 i +=1

###########################数据准备###################################
数据预处理完成后构建训练集和测试集的读取器,训练集的读取器要求是快速随机批量,测试集只要求快速批量。
1.构建训练集读取器,用闭包写一个生成器,每一次拿数据就弹出一批次,这里用了一个paddle的中间处理函数,就是说,闭包先不返回里面的yield,因为神经网络要的不是你图像的李静吧?所以另写一个函数:实现图像读取,图像缩放、归一化, 经过中间函数处理后然后再返回


2.测试集也是同样的套路,只是名字变换了一下而已,到这里,数据预处理与数据准备就完成了
