如何使用 sklearn.datasets.load_files 加载数据百分比
Posted
技术标签:
【中文标题】如何使用 sklearn.datasets.load_files 加载数据百分比【英文标题】:How to load percentage of data with 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')
【问题讨论】:
【参考方案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,它会随机选择。以上是关于如何使用 sklearn.datasets.load_files 加载数据百分比的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?