代码之家  ›  专栏  ›  技术社区  ›  BAE

目录中的流可以从Keras中的同一目录中获取训练和验证数据吗?

  •  1
  • BAE  · 技术社区  · 6 年前

    下面的例子来自 here .

    train_datagen = ImageDataGenerator(
            rescale=1./255,
            shear_range=0.2,
            zoom_range=0.2,
            horizontal_flip=True)
    
    test_datagen = ImageDataGenerator(rescale=1./255)
    
    train_generator = train_datagen.flow_from_directory(
            'data/train',
            target_size=(150, 150),
            batch_size=32,
            class_mode='binary')
    
    validation_generator = test_datagen.flow_from_directory(
            'data/validation',
            target_size=(150, 150),
            batch_size=32,
            class_mode='binary')
    

    1 回复  |  直到 6 年前
        1
  •  15
  •   today    4 年前

    你可以通过 validation_split 参数(介于0和1之间的数字)到 ImageDataGenerator 类实例将数据拆分为训练集和验证集:

    generator = ImagaDataGenerator(..., validation_split=0.3)
    

    然后通过 subset flow_from_directory 指定培训和验证生成器:

    train_gen = generator.flow_from_directory(dir_path, ..., subset='training')
    val_gen = generator.flow_from_directory(dir_path, ..., subset='validation')
    

    注: 如果您已经为 然后利用该方法对训练图像和验证图像进行增强。

        2
  •  1
  •   dapperdan    5 年前

    上述解决方案要求您对训练集和验证集应用相同的增强,这可能不是您想要的(您可能不希望对验证数据应用剪切、旋转和缩放等)。同一文件夹中的单独培训和验证增强功能尚不可用。

    https://github.com/keras-team/keras/issues/5862 进行充分讨论(以及一些可能的处理方法)。人们通常求助于脚本来创建一个新的文件夹进行验证,但这并不是这个问题的确切答案。

        3
  •  1
  •   Hassan el-Hajj    5 年前

    正如@dapperdan所提到的,当前由@today标记的解决方案意味着训练集和验证集都要经历相同的转换;如果您不打算进行数据扩充,这是很好的。如果您想进行数据扩充,那么您需要转换培训数据,并将验证数据保留为“未经整理”。

    为此,您应该创建两个ImageDataGenerator,其中包含相应数据所需的转换;然后使用具有相同种子的“flow\ from\ u directory”选择子集。

    # Validation ImageDataGenerator with rescaling.
    valid_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2)
    # Training ImagaDataGenerator with Augmentation transf.  
    train_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2,\
                                       rotation_range=15, shear_range=10,\
                                       zoom_range=0.1, fill_mode='nearest', \
                                       height_shift_range=0.05, width_shift_range=0.1)
    
    # Create a flow from the directory for validation data - seed=42
    # Choose subset = 'validation'
    valid_gen = valid_datagen.flow_from_directory(dir_path, subset='validation',\
                                                  shuffle=True, seed=42, 
                                                  target_size=img_shape,\
                                                  batch_size=64)
    # Create a flow from the directory using same seed and 'training' subset.
    train_gen = train_datagen.flow_from_directory(dir_path, subset='training',\
                              shuffle=True, seed=42, target_size=img_shape,\
                              batch_size=64)