3.2 数据准备
首先要做一些数据准备方面的工作:一是把数据集切分为训练集和验证集,二是转换为tfrecord格式。在data_prepare/文件夹中提供了会用到的数据集和代码。
首先要将自己的数据集切分为训练集和验证集,训练集用于训练模型,验证集用来验证模型的准确率。本书已经向读者提供了一个实验用的卫星图片分类数据集,这个数据集一共有6个类别,见表3-1。
表3-1 本书提供的卫星图像数据集包含的6个类别及其示例图像
在data_prepare目录中,用一个pic文件夹保存原始的图像文件,图像文件保存的结构如下:
data_prepare/ pic/ train/ wood/ water/ rock/ wetland/ glacier/ urban/ validation/ wood/ water/ rock/ wetland/ glacier/ urban/
将图片分为train和validation两个目录,分别表示训练使用的图片和验证使用的图片。在每个目录中,分别以类别名为文件夹名保存所有图像。在每个类别文件夹下,存放的就是原始的图像(如jpg格式的图像文件)。
下面,在data_prepare文件夹下,使用预先编制好的脚本data_convert.py,将图片转换为为tfrecord格式:
python data_convert.py-t pic/ \ --train-shards 2 \ --validation-shards 2 \ --num-threads 2 \ --dataset-name satellite
解释这里参数的含义:
· -t pic/:表示转换pic文件夹中的数据。pic文件夹中必须有一个train目录和一个validation目录,分别代表训练和验证数据集。每个目录下按类别存放了图像数据。
·--train-shards 2:将训练数据集分为两块,即最后的训练数据就是两个tfrecord格式的文件。如果读者的数据集较大,可以考虑将其分为更多的数据块。
·--validation-shards 2:将验证数据集分为两块。
·--num-threads 2:采用两个线程产生数据。注意线程数必须要能整除train-shards和validation-shards,来保证每个线程处理的数据块数是相同的。
·--dataset-name satellite:给生成的数据集起一个名字。这里将数据集起名叫“satellite”,最后生成文件的开头就是satellite_train和satellite_validation。
运行上述命令后,就可以在pic文件夹中找到5个新生成的文件,分别是训练数据satellite_train_00000-of-00002.tfrecord、satellite_train_00001-of-00002.tfrecord,以及验证数据satellite_validation_00000-of-00002.tfrecord、satellite_validation_00001-of-00002.tfrecord。另外,还有一个文本文件label.txt,它表示图片的内部标签(数字)到真实类别(字符串)之间的映射顺序。如图片在tfrecord中的标签为0,那么就对应label.txt第一行的类别,在tfrecord的标签为1,就对应label.txt中第二行的类别,依此类推。