使用 ImageDataGenerator 时 Keras 训练速度很慢

Sou*_*mes 4 python deep-learning keras google-colaboratory

所以我刚开始使用 Keras,我首先尝试了 MNIST 数据集,一切都在几秒钟内快速完成了 5 个 epoch(60k 图像)。

现在我正在尝试在包含大约 8000 个图像的汽车数据集上训练 CNN,我使用 ImageDataGenerator 将图像大小调整为相同大小 (128 * 128),并从具有文件名和类名的数据帧中获取它对于每张图像,以下是负责此操作的部分:

datagen=ImageDataGenerator(validation_split=0.2)
train_generator = datagen.flow_from_dataframe(dataframe=df_train, directory="cars/cars_train/cars_train/", x_col="fname", y_col="class_name", class_mode="categorical", target_size=(128,128), batch_size=32,subset="training")
test_generator = datagen.flow_from_dataframe(dataframe=df_train, directory="cars/cars_train/cars_train/", x_col="fname", y_col="class_name", class_mode="categorical", target_size=(128,128), batch_size=32,subset="validation")
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,除了调整数据集大小之外,我没有做任何密集的事情。当我model.fit在 ImageDataGenerator 上使用时,第一个 epoch 需要大约 2800 秒才能完成,另一个 epoch 仅需要大约 60 - 70 秒(1 分钟)。神经网络并不复杂,只有2个卷积层+1个密集层。

nb_epochs = 4
bs = 32
model.fit(
    train_generator,
    steps_per_epoch = train_generator.samples//bs,
    validation_data = test_generator, 
    validation_steps = test_generator.samples//bs,
    epochs = nb_epochs)
Run Code Online (Sandbox Code Playgroud)

我想知道使用 ImageDataGenerator 训练网络很慢尤其是在第一个时期是否正常?如果是这样,在训练网络之前是否有更快更有效的方法来调整图像大小并对其进行预处理?

顺便说一句,我正在使用 Google Colab,我启用了 GPU 并检查了 TensorFlow 是否正在使用 GPU

这是笔记本的链接,很乱,抱歉: https: //colab.research.google.com/drive/1FqPeqIhKo_lUjhoB2jlne1HnwItOJkIW ?usp=sharing

ten*_*eng 6

如果你可以workers=8在 中指定为 kwarg fit,请尝试一下。

如果没有,请fit使用已弃用的方法进行交换fit_generator,并查看如果增加工作人员是否会提高性能。 https://www.tensorflow.org/api_docs/python/tf/keras/Model

model.fit_generator(
    train_generator,
    workers=8,
    steps_per_epoch = train_generator.samples//bs,
    validation_data = test_generator, 
    validation_steps = test_generator.samples//bs,
    epochs = nb_epochs)
Run Code Online (Sandbox Code Playgroud)

或者,您可以在神经网络的顶部添加平均池或最大池,以便在神经网络中内置下采样,从而利用 GPU 执行下采样。