因此,我刚开始使用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
答案 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>