1. Импортировать керас
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
2. Conv2D
Построить сверточные слои. Используется для извлечения признаков из входного многомерного массива. Каждый фильтр сверточного слоя представляет собой карту признаков, которая используется для извлечения определенного признака.Количество фильтров определяет количество выходных признаков сверточного слоя или выходную глубину. Поэтому каждый раз, когда высокоразмерные данные, такие как изображения, проходят через сверточный слой, глубина увеличивается и равна количеству фильтров.
Conv2D(filters, kernel_size, strides, padding, activation='relu', input_shape)
-
filters
: количество фильтров -
kernel_size
: число, определяющее высоту и ширину (квадратного) окна свертки. -
strides
: шаг свертки, по умолчанию 1 -
padding
: как свертка обрабатывает ребра. Варианты включают «действительный» и «такой же». По умолчанию "действительно" -
activation
: функция активации, обычно устанавливается наrelu
. Если значение не указано, функция активации не применяется. Настоятельно рекомендуется добавить функцию активации ReLU к каждому сверточному слою в сети. -
input_shape
: кортеж, определяющий высоту, ширину и глубину входного слоя. Когда сверточный слой используется как первый слой модели, этот параметр должен быть указан, в противном случае он не требуется.
Пример 1: построить CNN, входной слой принимаетИзображение пикселей в градациях серого; за входным слоем следует сверточный слой с 16 фильтрами по 2 ширины и высоты; при выполнении свертки я хочу, чтобы фильтры прыгали на 2 пикселя за раз. Также нельзя, чтобы фильтр выходил за пределы картинки, то есть не дополнял картинку нулями.
Conv2D(filters=16, kernel_size=2, strides=2, activation='relu', input_shape=(200, 200, 1))
Пример 2: добавьте сверточный слой после сверточного слоя примера 1. Новый сверточный слой имеет 32 фильтра, каждый шириной и высотой 3. При выполнении операции свертки вы хотите, чтобы фильтр перемещался на 1 пиксель за раз. И вы хотите, чтобы сверточный слой видел все области предыдущего уровня, поэтому не возражайте, если вы выйдете за края предыдущего уровня при выполнении свертки.
Conv2D(filters=32, kernel_size=3, padding='same', activation='relu')
Пример 3: упрощенная запись. Создайте фильтр с 64 фильтрами, каждый с размером фильтра. Иерархия имеет функцию активации ReLU. Операция свертки перемещает один пиксель за раз. и отбросить краевые пиксели.
Conv2D(64, (2,2), activation='relu')
3. MaxPooling2D
Создайте максимальный объединяющий слой. Если сверточный слой извлекает признаки из многомерных данных с помощью фильтров и увеличивает глубину (количество признаков) выходных данных, то роль слоя максимального объединения заключается в уменьшении выходного измерения (ширины и высоты). В архитектуре CNN слой max pooling обычно появляется после сверточного слоя, за которым следует следующий сверточный слой, который чередуется, в результате чего входной многомерный массив увеличивается в глубину и уменьшается в размерности. Наконец, многомерная пространственная информация постепенно преобразуется в одномерный вектор признаков, а затем подключается к полносвязному слою или другим алгоритмам классификации для получения выходных данных модели.
MaxPooling2D(pool_size, strides, padding)
- pool_size: число, указывающее высоту и ширину окна пула.
- шаги: вертикальные и горизонтальные шаги. Если значение не указано, по умолчанию для strides используется значение pool_size.
- заполнение: варианты включают
valid
иsame
. Если значение не указано, заполнение устанавливается равнымvalid
Пример: добавьте максимальный объединяющий слой после сверточного слоя, чтобы уменьшить размер сверточного слоя. Предположим, что размер сверточного слоя равен (100, 100, 15), а размер максимального объединяющего слоя ожидается равным (50, 50, 15). Чтобы добиться этого, вы можете использовать окно 2x2 в слое максимального пула с шагом, установленным на 2, код выглядит следующим образом:
MaxPooling2D(pool_size=2, strides=2)
4. Создайте CNN для классификации изображений
4.1 Создание модели сериализации
model = Sequential()
4.2 Добавление сверточных слоев и максимальных объединенных слоев
Здесь соответственно добавляются 3 сверточных слоя и 3 максимальных слоя объединения. Количество фильтров в сверточном слое постепенно увеличивается, а параметры заполнения всеsame
, strides использует значение по умолчанию 1, что означает, что сверточный слой не изменит ширину и высоту изображения, а только извлечет больше признаков через слой фильтра. Для слоя максимального пула strides и pool_size по умолчанию установлены на 2, что означает, что слой максимального пула может сжимать ширину и высоту изображения наполовину каждый раз.
Две вещи, которые следует отметить:
- Первый сверточный слой модели принимает входные данные, поэтому вам необходимо установить параметр input_shape, чтобы указать входное измерение. Установка здесь (32, 32, 3) означает, что входное изображение должно быть цветным изображением RGB с шириной и высотой 32 пикселя. Слоям после первого слоя не нужно устанавливать input_shape, потому что модель автоматически использует выходную форму предыдущего слоя в качестве входной формы следующего слоя.
- Потому что, мы привыкли, что сверточный слой не меняет размерность, а максимальный объединяющий слой пусть каждый раз уменьшает размерность, то есть ширина и высота делятся на 2. Для того, чтобы всегда быть делимым, лучше всего установите входную форму в целочисленную степень 2. Следующий текст установлен в.
model.add(Conv2D(filters=16, kernel_size=2, padding='same', activation='relu', input_shape=(32, 32, 3)))
model.add(MaxPooling2D(pool_size=2))
model.add(Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=2))
model.add(Conv2D(filters=64, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=2))
4.3 Плоский слой
Входная форма модели (32, 32, 3) , После предыдущей свертки и максимального объединения текущая выходная ширина и высота могут быть получены как, глубина равна 64, количество фильтров в последнем сверточном слое, поэтому выходная форма (4, 4, 64). Роль выравнивающего слоя заключается в преобразовании этого многомерного массива (в отраслевой терминологии называемого张量
), преобразованный в такое же количество одномерных векторов, поэтому длина вектора равна.
model.add(Flatten())
4.4 Вывод классификации полносвязного слоя
Как упоминалось выше, сверточный слой и слой максимального объединения используются в комбинации для извлечения признаков из двумерного изображения, и после деконструкции пространственной информации в векторы признаков можно подключить классификатор для получения выходных данных предсказания модели. Здесь классификатор использует два полносвязных слоя, а последний полносвязный слой также является выходным слоем, используяsoftmax
Таким образом, в качестве слоя активации выводится вектор длины 10, соответствующий прогнозируемым значениям вероятности для 10 классов.
model.add(Dense(500, activation='relu'))
model.add(Dense(10, activation='softmax'))
4.5 Просмотр архитектуры полной модели
На данный момент мы завершили очень простой, но очень полный архитектурный проект сверточной нейронной сети (CNN) для классификации изображений. Мы можем использовать модельsummary()
Метод рассматривает всю модель и гарантирует, что архитектура модели соответствует вашим ожиданиям.summary()
Метод будет отображать количество параметров каждого слоя модели, а также общее количество параметров всей модели и количество параметров, которые можно обучить, что помогает нам легко понять сложность модели. Видно, что наша модель имеет в общей сложности528,054
параметры. Уверенные читатели также обнаружат, что только сверточный слой и полносвязный слой имеют параметры, а количество параметров полносвязного слоя намного больше, чем у сверточного слоя. На самом деле, это также показывает тот факт, что по сравнению с полной связью сверточный слой является частично связанным, и количество его параметров также может быть вычислено из параметров, переданных сверточным слоем. Вычисление количества параметров на самом деле очень просто, но это не является предметом этой статьи.Заинтересованные читатели могут Baidu самостоятельно, или следите за блогом автора для последующих обновлений.
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_4 (Conv2D) (None, 32, 32, 16) 208
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 16, 16, 16) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 16, 16, 32) 2080
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 8, 8, 32) 0
_________________________________________________________________
conv2d_6 (Conv2D) (None, 8, 8, 64) 8256
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 4, 4, 64) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 1024) 0
_________________________________________________________________
dense_1 (Dense) (None, 500) 512500
_________________________________________________________________
dense_2 (Dense) (None, 10) 5010
=================================================================
Total params: 528,054
Trainable params: 528,054
Non-trainable params: 0
_________________________________________________________________
5. Прорывная архитектура CNN
5.1 AlexNet
Разработан в 2012 году командой Университета Торонто. Сеть была обучена в течение недели с использованием самого мощного графического процессора на тот момент. AlexNet находится на переднем крае использования функций активации ReLU и выпадающих слоев, чтобы избежать переобучения. Использование сверточных слоевбольшое окно.
5.2 VGG
Разработан в 2014 году группой визуальной геометрии Оксфордского университета. Существует две версии VGG, VGG16 и VGG19, с 16 и 19 слоями соответственно. Обе версии очень просты и красивы, состоят из очень длинногоСверточная последовательность, перемежающаясяобъединяющий слой и, наконец, 3 полносвязных слоя.
5.3 ResNet
Разработан Microsoft Research в 2015 году. ResNet также имеет разные версии, разница заключается в количестве слоев, самая большая сеть имеет рекордные 152 слоя.
6. Заключение
В этом документе представлен метод проектирования архитектуры CNN с использованием Keras для классификации изображений, а также представлены 3 известные архитектуры CNN. О том, как обучить CNN и внедрить полную модель классификации изображений, слишком много, чтобы поместить в статью.Если вы хотите узнать больше, вы можете следить за последующей колонкой автора.
Отсканируйте QR-код в WeChat, чтобы получить оригиналы новейших технологий