保存发电机的输出

时间:2019-01-25 23:46:00

标签: python keras google-colaboratory data-generation

我正在建立一个神经网络,我有一个自定义生成器,该生成器读取每个类的所有图像并执行一些预处理功能。由于我是这个世界的新手,并且我使用的是google-colaboratory,因此我发现它每个会话有12个小时(数据生成器和历元太长了),如果可能,我只想做一次生成器,保存进行归档,然后加载得更快,因为google-colaboratory的使用时间限制为12个小时,这使我无法训练所有网络。

hist_fine = model.fit_generator(
    generator=generate_from_paths_and_labels(
        input_paths=train_input_paths,
        labels=train_labels,
        batch_size=batch_size_fine
    ),
    steps_per_epoch=math.ceil(len(train_input_paths) / batch_size_fine),
    epochs=epochs_fine,
    validation_data=generate_from_paths_and_labels(
        input_paths=val_input_paths,
        labels=val_labels,
        batch_size=batch_size_fine
    ),
    validation_steps=math.ceil(len(val_input_paths) / batch_size_fine),
    verbose=1,
    callbacks=[
        ModelCheckpoint(
            filepath=os.path.join(result_root, 'model_fine_ep{epoch}_valloss{val_loss:.3f}.h5'),
            period=snapshot_period_fine,
        ),
    ],
)
def generate_from_paths_and_labels(input_paths, labels, batch_size, input_size (299,299)):

num_samples = len(input_paths)
while 1:
    perm = np.random.permutation(num_samples)
    input_paths = input_paths[perm]
    labels = labels[perm]
    for i in range(0, num_samples, batch_size):
        inputs = list(map(
            lambda x: image.load_img(x, target_size=input_size),
            input_paths[i:i+batch_size]
        ))
        lambda x: image.img_to_array(x)
        lambda x: light_normalization(x)
        inputs = np.array(list(map(
            lambda x: image.img_to_array(x),
            inputs
        )))
        inputs = preprocess_input(inputs)
        yield (inputs, labels[i:i+batch_size])

这是我实际的model.fit_generator和生成器的代码,因为该数据集由70k张图片组成,在Google协作中大约需要5-6个小时才能完成。有什么可以让我更快地做到这一点?感谢您的回答!

0 个答案:

没有答案