Keras FlowFromDirectory节省内存分批训练

很多时候我们样本太大,机器内存或者显存太小, 系统无法一次加载太多样本,那么我们可以使用 Keras的API
from keras.preprocessing.image import ImageDataGenerator
来分批生成样本,其实ImageDataGenerator 是一个样本生成器也是一个惰性生成器。今天我们主要看一下样本惰性生成器。
如下场景:
比如我们有一个目录如下图。Train_dataset 是根目录,然后每个子目录是一个类。 那么目录名是该类的标签即lable,样本在根目录下。这个作为一个基础结构我们可以使用如下代码读取并使用fit generator启动网络。

from keras.preprocessing.image import ImageDataGenerator

dategen = ImageDataGenerator() #实例化 
关于ImageDataGenerator样本增强器的使用参考( http://www.51lulu.pro/threads/ML_Note/right/2/ )

 #调用函数 注意各项参数 
dataset = dategen.flow_from_directory(
        directory='Train_dataset', #目录 注意这里要设置根目录,子目录为lable
        target_size=(100,100),#跟你输入的样本尺寸一直必须要设置
        shuffle=True, #打乱样本
        batch_size=100, #这里就是一次生成的样本数量对应fit里的batchsize
        class_mode='categorical'
    )
    
‘’‘ 网络结构+编译代码 省略 ‘‘’
‘’‘ ........'''

model.fit_generator(dataset,steps_per_epoch=100,epochs=10)
#注意steps per epoch是告诉生成器生成多少批样本
#steps_per_epoch*batchsize = 一个epoch训练的总样本数量


#以此类推 大家可以生成test或vali数据集,然后加入fit_generator里