Классификация изображений с использованием Keras, обучение CNN очень МЕДЛЕННО - PullRequest
0 голосов
/ 16 декабря 2018

Я пробовал двоичную классификацию с использованием CNN.Выполнено с тем же кодом, который описан в https://www.udemy.com/deeplearning/. Но когда я запускаю код на моем ПК (8 ГБ ОЗУ ЦП), обучение выполняется очень медленно с одним элементом в каждой эпохе, хотя я и далразмер пакета 32. Однако он работает так же хорошо на компьютере инструктора (даже если он тоже использует процессор).Набор поездов состоит из 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)

Поток от предварительной обработки изображений на основе каталогов выполняется, как описано в документации Keras., С Tensorflow в качестве бэкэнда.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Дэн абсолютно прав, что работа на графическом процессоре спасет жизнь.Однако я заметил, что ваше значение steps_per_epoch равно 8000, что соответствует количеству изображений в вашем тренировочном наборе.Обычно это должно быть равно количеству изображений, деленному на размер пакета.В вашем случае steps_per_epoch должен быть равен 8000/32 = 250.

Посмотрите здесь быстрый пример: https://github.com/brandonschabell/AircraftClassification/blob/new-model-brandon/BrandonsModel.py

0 голосов
/ 17 декабря 2018

Хотя GPU, несомненно, обеспечит существенное повышение скорости для вывода и обучения DNN, возможные улучшения производительности при правильной оптимизации ЦП обычно в значительной степени игнорируются. Этот вопрос о вероятных причинах медленного обучения на процессоре (возможно, с Keras) .

Установить (или скомпилировать)правильный двоичный файл TensorFlow:

  • При установке TF с pip install tensorflow вы получаете общую версию, совместимую с максимально возможным количеством конфигураций машины, поскольку pip (easy_install, virtualenv и т. Д.) Сфокусированы на Python, игнорируя зависимости от библиотек, отличных от Python, такие как HDF5, MKL, LLVM и т. Д. Установка оптимизированной сборки TF с помощью Intel MKL-DNN можетувеличьте производительность на 70x для обучения и до 85x на вывод ( ссылка ).Прочитайте здесь о том, как собрать свой pip-wheel с поддержкой MKL .

  • Если вы не хотите самостоятельно компилировать TF из исходного кода, установите двоичный файл TFс conda, который обрабатывает библиотечные зависимости вне пакетов Python, а также сами пакеты Python (например, см. здесь для общего обсуждения pip против conda).Смотрите также эту статью для прямого сравнения производительности на CPU Eigen и MKL-оптимизированной версии TF.Пример установки сборки, оптимизированной для MKL: conda install tensorflow-mkl.

  • Кроме того, соберите TensorFlow из исходного кода для максимальной производительности.MKL (-DNN) является (обычно) быстрым и позволяет развертывать предварительно скомпилированный двоичный файл, не зная о доступных собственных внутренних векторах SIMD, но в зависимости от вашей экосистемы ЦП использование расширений AVX / AVX2 / AVX512 может быть (даже) быстрее.

Оптимизация входного конвейера :

  • Наконец, предостережение Кераса.Использование Keras в качестве входного конвейера для обучения DNN также может стать существенным узким местом.Keras использует библиотеки Python multithreading (и, необязательно, multiprocessing), которым может не хватать производительности (при выполнении интенсивных операций ввода-вывода или оперативного увеличения) и масштабируемости (при работе на нескольких процессорах) по сравнению с Реализации без GIL .Рассмотрите возможность выполнения автономного дополнения или использования альтернативных входных конвейеров (например, TF native tf.data или сторонних, например Tensorpack)

AtИ наконец, если вы только начинаете с TensorFlow, не стесняйтесь выдавливать из системы самые последние FLOP.В начале это не так важно.

0 голосов
/ 16 декабря 2018

поместите все свои данные в ваш гугл-диск, смонтируйте его в http://colab.research.google.com. ... и бесплатно запустите ваш код на GPU!Процессор не лучший выбор при работе с изображениями ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...