Сохранить вывод генераторов - PullRequest
0 голосов
/ 26 января 2019

Я строю нейронную сеть, и у меня есть собственный генератор, который читает все изображения для каждого класса и выполняет некоторую функцию предварительной обработки. Поскольку я новичок в этом мире, и я использую Google-Colab Laboratory, которую я обнаружил, что у нее есть 12 часов на сеанс (генераторы данных и эпохи слишком длинны), я хочу сделать генератор только один раз, если это возможно, сохраняя в файл, а затем загрузить быстрее, потому что это не позволяет мне обучать все сети из-за 12-часового лимита google-colab Laboratory.

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 и генератора, так как набор данных состоит из 70 тыс. Изображений, которые он берет в google-colab Laboratory около 5-6 часов. Есть что-то, что позволяет мне делать это быстрее? Спасибо за ответ!

...