Я строю нейронную сеть, и у меня есть собственный генератор, который читает все изображения для каждого класса и выполняет некоторую функцию предварительной обработки. Поскольку я новичок в этом мире, и я использую 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 часов. Есть что-то, что позволяет мне делать это быстрее? Спасибо за ответ!