有没有一种简单的方法可以使用 ImageDataGenerator 对 10% 的训练和测试数据进行子集化?

Is there a simple way to subset 10 percent of train and test data using ImageDataGenerator?

我的目录结构如下:

-root_dir----------------------------


--train
---dog   (contains 750 images of dogs)
---cat   (contains 750 images of cats)
---mouse (contains 750 images of mice)

--test
---dog   (contains 250 images of dogs)
---cat   (contains 250 images of cats)
---mouse (contains 250 images of mice)

这就是我加载数据的方式:

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_data_gen = ImageDataGenerator(rescale=1./255)
train_data = train_data_gen.flow_from_directory(directory='/root_dir/train/',
                                                target_size=(224, 224),
                                                class_mode='categorical',
                                                batch_size=32,
                                                seed=42)

test_data_gen = ImageDataGenerator(rescale=1./255)
test_data = test_data_gen.flow_from_directory(directory='/root_dir/test/',
                                                target_size=(224, 224),
                                                class_mode='categorical',
                                                batch_size=32,
                                                seed=42)

它工作正常。 train_data 包含每个 class 的 750 张图像。

但是,我只需要 运行 对 10% 的数据进行快速实验。 我需要 train_data_10_percent_subset,其中包含每个 class.

的 75 张随机选择的图像

有没有简单的方法使用 ImageDataGenerator 在每个子文件夹中随机选择 train 目录中 10% 的图像?

我需要一个生成器,其中包含每个 class 的 75 张图像,来自火车子文件夹

你可以做到这一点

train_data_gen = ImageDataGenerator(rescale=1./255, validation_split=.1)
train_data = train_data_gen.flow_from_directory(directory='/root_dir/train/',
                                                target_size=(224, 224),
                                                class_mode='categorical',
                                                batch_size=32,
                                                seed=42, subset='validation')

将 validation_split 设置为 .1 保留 10% 的数据用于验证。设置 subset='validation' 将使 train_data 拥有 10% 的训练数据