0. 需求
- 当训练的数据非常多时,是不希望分配过多的内存将数据存入,否则其他占用内存的数据处理步骤就没法进行了。我们最好是以小批量地方式读入数据,然后预处理,然后送到网络,之后释放内存,以此循环。
1. 方法的简要说明
- tf.keras中有一个高度封装的图片预处理类:ImageDataGenerator
- ImageDataGenerator类还实现了一个非常方便的自动读取训练集文件夹的方法:flow_from_directory()
- 我们实例化一个ImageDataGenerator类后,设置预处理的参数;然后对实例调用flow_from_directory()方法。对该方法传递一个路径参数,路径为数据集所在目录。其中训练集和测试集要分成两个文件夹,并且每一个label对应的图片存放在以label命名的文件夹中。
- 调用flow_from_directory()方法之后,会返回一个生成器。
- 生成器可以用next()函数来在每次迭代中提取(X,y),或者也可以直接传递给实例化的模型类的fit()方法
(使用前建议shift+tab查看函数|类的说明文档)
2. 案例: 斯坦福120个狗品种分类
(忽略训练结果,只是示例数据读取和预处理)
<代码及运行结果>
(不要介意图片中的狗看起来像个地精)