如何从tf.keras的flow_from_directory返回结果中提取X_train数据集
提取X_train的方法
flow_from_directory返回的是无限迭代的批次生成器,你需要遍历所有批次拼接得到完整的X_train,具体实现如下:
import numpy as np X_train = [] # 按批次遍历完整数据集,len(train_set)就是总批次数量 for i in range(len(train_set)): # 每个批次返回(批次图片, 批次标签),取第一个元素即为图片数据 batch_imgs = train_set[i][0] X_train.extend(batch_imgs) # 转为numpy数组,最终形状为 (总样本数, 224, 224, 3) X_train = np.array(X_train)
注意事项
- 如果你在初始化
ImageDataGenerator时开启了随机增强(旋转、翻转、缩放等参数),每次生成的图片数据都会变化,提取的X_train无法和固定的train_set.classes一一对应,建议同时提取每个批次的标签保证匹配:X_train = [] Y_train = [] for i in range(len(train_set)): batch_x, batch_y = train_set[i] X_train.extend(batch_x) Y_train.extend(batch_y) X_train = np.array(X_train) Y_train = np.array(Y_train) - 默认情况下
flow_from_directory会开启shuffle打乱样本顺序,单独提取的X_train和train_set.classes顺序不匹配,要么初始化生成器时设置shuffle=False,要么用上面同时提取X、Y的方式获取匹配的数据集。 - 数据集过大时不建议一次性提取全部X_train到内存,直接用生成器喂给模型训练即可,避免内存溢出。
内容的提问来源于stack exchange,提问作者seni
相关产品推荐
相关产品推荐

