所以我刚刚开始使用Keras,我首先尝试了MNIST数据集,只用了几秒钟(60k图像),一切都快到了5个时期。
现在我试图在一个有大约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分钟)。神经网络并不复杂,它只有2个卷积层+一个密集层。
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
发布于 2020-05-11 04:33:45
如果您可以在fit中将workers=8指定为kwarg,那么可以尝试一下。
如果没有,就用废弃的方法fit_generator替换fit,看看如果增加工作线程,性能是否会提高。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执行下采样。
https://stackoverflow.com/questions/61718271
复制相似问题