使用 Keras 进行图像分类,CNN 训练速度非常慢

Suv*_*vab 2 python image-processing conv-neural-network keras

我尝试使用 CNN 进行二元分类。使用与https://www.udemy.com/deeplearning/上解释的完全相同的代码完成。但是,当我在我的 PC(CPU-8 GB RAM)上运行代码时,即使我将批量大小指定为 32,训练在每个 epoch 中的单个项目执行速度非常慢。但是,它在教师的计算机(尽管他也使用CPU)。训练集总共包含 8000 张图像,测试集包含 2000 张图像。我知道对于这么大的数据,处理肯定会很慢,但我注意到它比平常慢得多。

from keras.layers import Dense
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.models import Sequential
classifier=Sequential()

classifier.add(Convolution2D(32, (3, 3 ), input_shape=(64,64,3),activation='relu'))

classifier.add(MaxPooling2D(pool_size=(2 , 2)))

classifier.add(Flatten())

classifier.add(Dense(units=128, activation='relu'))
classifier.add(Dense(units=1, activation='sigmoid'))

classifier.compile(optimizer='adam' , loss='binary_crossentropy' ,metrics=['accuracy'])


from keras.preprocessing.image import ImageDataGenerator


train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)


test_datagen = ImageDataGenerator(rescale=1./255)


training_set = train_datagen.flow_from_directory(
        'dataset/training_set',
        target_size=(64, 64), #since 64,64,pixels
        batch_size=32,
        class_mode='binary')



test_set= test_datagen.flow_from_directory(
        'dataset/test_set',
        target_size=(64, 64),
        batch_size=32,
        class_mode='binary')

classifier.fit_generator(
        training_set,
        steps_per_epoch=8000,
        epochs=25,
        validation_data=test_set,
        validation_steps=2000)
Run Code Online (Sandbox Code Playgroud)

基于目录的图像预处理流程按照 Keras 文档中的说明完成,使用 Tensorflow 作为后端。

谢谢!

Bra*_*ell 5

Dan 完全正确,在 GPU 上运行将成为救星。然而,我注意到你的“steps_per_epoch”值为 8000,它等于你的训练集中的图像数量。这通常应该等于图像数量除以批量大小。在您的情况下,steps_per_epoch 应等于 8000/32 = 250。

看一下这里的简单示例:https://github.com/brandonschabell/AircraftClassification/blob/new-model-brandon/BrandonsModel.py