tf.keras 用生成器读取图片数据+预处理
Posted mx0813
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tf.keras 用生成器读取图片数据+预处理相关的知识,希望对你有一定的参考价值。
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个狗品种分类
(忽略训练结果,只是示例数据读取和预处理)
<代码及运行结果>
(不要介意图片中的狗看起来像个地精)
以上是关于tf.keras 用生成器读取图片数据+预处理的主要内容,如果未能解决你的问题,请参考以下文章
深度学习笔记:tf.keras.preprocessing.image_dataset_from_directory运行错误
如何从大型 .h5 数据集中批量读取数据,使用 ImageDataGenerator 和 model.fit 进行预处理,所有这些都不会耗尽内存?
是否可以将数据帧传递给每行都有一个 numpy 数组的 TF/Keras?
tf.keras在 cifar 上训练 AlexNet,数据集过大导致 OOM