You need to enable JavaScript to run this app. 如何用ImageDataGenerator从训练集中按类别随机抽取10%数据子集?
优惠活动
大模型
产品
解决方案
定价
更多

如何用ImageDataGenerator从训练集中按类别随机抽取10%数据子集?

解决方案

实现方式

直接通过ImageDataGenerator自带的validation_split参数即可实现需求,不需要修改现有目录结构,也不需要额外写采样逻辑。
该参数会自动按类别等比例分层抽样,完美匹配你每个类别抽取10%样本的要求。

代码示例

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_data_gen = ImageDataGenerator(
    rescale=1./255,
    validation_split=0.9 # 预留90%数据为验证集,剩下的10%为可用训练子集
)

train_data_10_percent_subset = train_data_gen.flow_from_directory(
    directory='/root_dir/train/',
    target_size=(224, 224),
    class_mode='categorical',
    batch_size=32,
    seed=42, # 固定seed保证抽样结果可复现
    subset='training' # 取拆分后的训练子集,即总训练数据的10%
)

# 测试集加载逻辑保持不变
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_10_percent_subset.samples查看总样本量,正常返回值为225,对应3个类别每个类别75张样本,完全符合需求。

可选写法

如果觉得上述参数逻辑不好理解,也可以换如下写法,效果完全一致:

train_data_gen = ImageDataGenerator(
    rescale=1./255,
    validation_split=0.1 # 预留10%数据为验证集
)

train_data_10_percent_subset = train_data_gen.flow_from_directory(
    directory='/root_dir/train/',
    target_size=(224, 224),
    class_mode='categorical',
    batch_size=32,
    seed=42,
    subset='validation' # 直接取拆分后的验证集,即总训练数据的10%
)

内容的提问来源于stack exchange,提问作者Amin Ba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 21:12:00