我正在建立一个神经网络,我有一个自定义生成器,该生成器读取每个类的所有图像并执行一些预处理功能。由于我是这个世界的新手,并且我使用的是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个小时才能完成。有什么可以让我更快地做到这一点?感谢您的回答!