Эта статья не о том, что такое CNN? или Техническое понимание архитектуры CNN? Эта статья предназначена для тех, кто уже знаком с CNN и ищет CNN как перспективу реализации.

В последние годы искусственный интеллект стал свидетелем огромных усилий, которые вывели цифровые машины на уровень логических выводов. Одна из основных задач, которые мы, люди, выполняем в каждый момент, - это наблюдение за окружающей средой, сканирование связанных объектов и их распознавание, чтобы принять какие-то значимые решения или действия.

Это действительно незаметный процесс для обычных мужчин, не вовлеченных в нейромедицину или информатику. Но на самом деле это не такой очевидный процесс. Технически это очень сложный процесс, который также требует от нас предварительных знаний. Например, когда я говорю Яблоко, ваш мозг сразу же всплывает несколько изображений и инцидентов, которые вы пережили с яблоком. Это происходит потому, что все вы знаете об этих фруктах и ​​тысячи раз ассоциировали название «яблоко» с его изображением, то есть с многочисленными особенностями некоторых видов яблок.

Чтобы это произошло с нашими цифровыми машинами, у нас есть отличный алгоритм глубокого обучения под названием Convolutional Neural Network, ConvNet или CNN.

Паттерны связи CNN вдохновлены организацией зрительной коры человеческого мозга. Впервые CNN представил Ян Лекун.

На первый взгляд архитектура CNN кажется ужасной, но хорошая новость в том, что это не так. Мы увидим, как поэтапно внедрить CNN и подогнать под него ваши данные, чтобы получать нужные вам прогнозы.

В основном это три шага для внедрения любой системы глубокого обучения.

  1. подготовка данных для конкретной архитектуры
  2. Создание модели
  3. Обучение и вывод модели

В этой статье я сосредоточусь только на создании модели CNN. Мы собираемся реализовать следующую архитектуру. Архитектура модели дана для облегчения пошаговой реализации.

Для начала импортируем некоторые важные модули и методы из библиотеки Keras.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import (
 Dense,
 Conv2D,
 MaxPool2D,
 Flatten,
 Dropout,
 BatchNormalization,
)

Далее мы определим последовательную модель. Это модель с простым стеком слоев. Для получения дополнительной информации о Последовательном слое посещение.

model = Sequential()

Теперь мы определим максимальный слой объединения, за которым следует наш 2D сверточный слой.

model.add(Conv2D(75, (3, 3), strides=1, padding="same", activation="relu", input_shape=(28, 28, 1)))
model.add(BatchNormalization())
model.add(MaxPool2D((2, 2), strides=2, padding="same"))

Эта ранняя свертка обнаруживает простые функции, такие как линии. Здесь 75 обозначает количество фильтров, которые будут изучены. (3, 3) - размер этих фильтров. Аргумент strides относится к размеру шага, который будет использовать фильтр при прохождении через изображение. Заполнение помогает сохранить размер выходного изображения того же размера, что и входного изображения.

Подобно нормализации наших входных данных, пакетная нормализация масштабирует значения в скрытых слоях, чтобы улучшить обучение.

Максимальный пул принимает входное изображение и сжимает его до более низкого разрешения, объединяя максимальное значение из данного окна.

Далее мы повторим тот же процесс для оставшегося необходимого количества слоев Conv2D, Maxpool2D и Dense.

model.add(Conv2D(50, (3, 3), strides=1, padding="same", activation="relu"))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(MaxPool2D((2, 2), strides=2, padding="same"))
model.add(Conv2D(25, (3, 3), strides=1, padding="same", activation="relu"))
model.add(BatchNormalization())
model.add(MaxPool2D((2, 2), strides=2, padding="same"))

Отсев - это метод предотвращения переобучения путем случайного выбора нейронов и их отключения, чтобы они не могли участвовать ни в прямом, ни в обратном проходе. Значение dropout указывает, сколько нейронов вы хотите отбросить.

Плотный слой - это слой нейронной сети с глубоким подключением, который выполняет следующую операцию:

output = activation(dot(input, weight_data) + bias)

Теперь последний шаг нашей модели - получить результат. Это будет выполнено с помощью Сглаживания значений.

model.add(Flatten())
model.add(Dense(units=512, activation="relu"))
model.add(Dropout(0.3))
model.add(Dense(units=num_classes, activation="softmax"))

Flatten () принимает выходные данные одного слоя, имеющего многомерную форму, и преобразует их в одномерный массив. Это называется вектором признаков, и он будет связан с последним слоем, используемым для окончательной классификации.

Итак, вот оно. Разве это не так просто?

Бонус: вы можете визуализировать свою модель, которую вы только что создали, с помощью метода model.summary ().

model.summary()

Этот метод печатает строковую сводку вашей сети.

Благодарим за обновление. Поделитесь своим мнением в комментариях.