使用ImageDataGenerator时Keras训练很慢

时间:2020-05-10 20:26:29

标签: python keras deep-learning google-colaboratory

因此,我刚开始使用Keras,我首先尝试了MNIST数据集,并且一切都在短短的5个纪元时间内完成了(6万张图像)。

现在,我正尝试在具有约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")

您可以看到,除了调整数据集的大小外,我没有做任何密集的工作。 当我在ImageDataGenerator上使用model.fit时,第一个纪元大约需要2800秒才能完成,而另一个纪元大约只需要60-70秒(1分钟)。 NN并不复杂,它只有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)

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

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

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

1 个答案:

答案 0 :(得分:0)

如果您可以在workers=8中将fit指定为kwarg,请尝试。

如果没有,则将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)

或者,您可以在神经网络的顶部添加一个平均池或最大池,以便在神经网络中内置下采样,从而利用gpu进行下采样。<​​/ p>