【问题标题】:How to load percentage of data with sklearn.datasets.load_files如何使用 sklearn.datasets.load_files 加载数据百分比
【发布时间】:2018-09-21 20:42:07
【问题描述】:

我有 8000 张图片,我正在使用 sklearn.datasets.load_files 加载并从 keras 通过 resnet 以获得瓶颈功能。然而,这项任务在 GPU 上需要花费数小时,所以我想知道是否有办法告诉load_files 加载一定百分比的数据,例如 20%。

我这样做是为了训练我自己的顶层(最后一个密集层)并将其附加到 resnet。

def load_dataset(path):
    data = load_files(path)
    files = np.array(data['filenames'])
    targets = np_utils.to_categorical(np.array(data['target']), 100)
    return files, targets

train_files, train_targets = load_dataset('images/train')

【问题讨论】:

    标签: python-3.x numpy scikit-learn deep-learning keras


    【解决方案1】:

    这听起来更适合 Keras ImageDataGenerator 类和使用 ImageDataGenerator.flow_from_directory 方法。您不必对它使用数据扩充(这会进一步减慢速度),但您可以选择从目录中提取的批量大小,而不是全部加载。

    抄自https://keras.io/preprocessing/image/,稍作修改,附注。

    train_datagen = ImageDataGenerator(  # <- customize your transformations
            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,  # <- control how many images are loaded each batch
            class_mode='binary')
    
    validation_generator = test_datagen.flow_from_directory(
            'data/validation',
            target_size=(150, 150),
            batch_size=32,
            class_mode='binary')
    
    model.fit_generator(
            train_generator,
            steps_per_epoch=2000,  # <- reduce here to lower the overall images used
            epochs=50,
            validation_data=validation_generator,
            validation_steps=800)
    

    编辑

    根据您在下面的问题... steps_per_epoch 决定了每个 epoch 加载了多少批次。

    例如:

    • steps_per_epoch = 50
    • batch_size = 32
    • epochs = 1

    将为您提供该时期总共 1,600 张图像。这恰好是 8,000 张图像的 20%。 注意,如果批处理大小为 32 时遇到内存问题,您可能需要减少此值并增加 step_per_epoch。这需要一些修补才能让它正确。

    【讨论】:

    • 你能解释一下每个epoch的步数和图像的数量是一样的吗
    • 它允许您控制图像的总数,我刚刚编辑了我的帖子,详细说明了您可能希望如何使用它。
    • 最后我会手动修剪数据。我在修剪后的数据上使用生成器 - 我问我的问题的原因是因为我不确定生成器是否从所有类中随机选择(我更喜欢)。我的直觉是它按顺序进行。
    • 你可以设置shuffle参数为True,它会随机选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2023-01-30
    • 1970-01-01
    • 2023-03-18
    • 2011-06-27
    • 2011-06-29
    相关资源
    最近更新 更多