Первоначально опубликовано наhttps://www.niit.com/india/

Сверточная нейронная сеть (CNN) является краеугольным камнем классификации изображений. По сути, получение изображения и присвоение ему класса и уникальной метки как явления глубокого обучения включено в CNN. Неотъемлемая часть экспериментов по машинному обучению формируется из-за классификации изображений с помощью CNN.

От функции пометки изображений Facebook до рекомендаций по продуктам Amazon, от работы автоматических автомобилей до изображений здравоохранения — CNN широко используется для ряда приложений. Требование минимальной предварительной обработки — вот что делает CNN широко популярным. Проще говоря, 2D-изображения читаются благодаря применению фильтров. По-видимому, другие традиционные алгоритмы на это не способны.

Функционирование CNN

Также известные как ConvNets, сверточные нейронные сети были впервые представлены Яном Лекуном (исследователем в области компьютерных наук с докторской степенью) в 1980-х годах. Ранняя версия CNN, также известная как LeNet, способна распознавать рукописные цифры. Нишевый рынок CNN можно увидеть в почтовых услугах и банковском деле.

CNN обычно оснащен входными, выходными и скрытыми слоями, что позволяет процессу двигаться дальше и помогает в классификации изображения. Некоторые из императивных слоев, а именно слои ReLU, сверточные слои, полносвязные слои и слои пула, являются частью скрытых слоев.

Классификация изображения с помощью программирования CNN

Продолжайте читать, чтобы узнать о том, как вы можете классифицировать изображение с помощью CNN:

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

# Описание: Эта программа классифицирует изображения

Во-вторых, убедитесь, что установка зависимостей и пакетов выполнена. Если пакеты еще не установлены, вам нужно запустить несколько вещей, таких как команда в вашем терминале, на веб-сайте Google Colab или в командной строке. Обратите внимание, что вы должны знать место установки языка программирования Python.

pip install tensorflow keras numpy skimage matplotlib

Импорт библиотек должен быть выполнен следующим образом:

импортировать тензорный поток как tf

из кераса импорта tensorflow

последовательный импорт из keras.models

из keras.layers импортировать Dense, Flatten, Conv2D, MaxPooling2D

Исключение

из слоев импорта tensorflow.keras

из импорта keras.utils в категориальный

импортировать numpy как np

импортировать matplotlib.pyplot как plt

plt.style.use («пять тридцать восемь»)

Следующим шагом является загрузка набора данных в переменные x.train (переменная, содержащая изображения для обучения), y.train (переменная, содержащая изображения метки в обучающем наборе), x.test (переменная, содержащая изображения для обучения) и y.test(переменная, содержащая метки изображений в обучающем наборе). набор).

#Загрузить данные

из keras.datasets импортировать cifar10

(a.bus, b.bus), (a.test, b.test) = cifar10.load_data()

Исследуйте данные

Ниже приведена необходимая кодировка:

print ( (type (x.train), (","), (type (y.train) (type (x.test), (","), (type (y.test))

Кроме того, вам необходимо получить форму данных x.train, y.train, x.test и y.test. Как только вы закончите с этим, вы можете увидеть 4-мерный массив в наборе данных x.train. Строки составляют 50 000 вместе с изображением размером 32 * 32 пикселя и глубиной 3 (RGB). Здесь R обозначает красный, G обозначает зеленый, а B обозначает синий.

Вы найдете двумерный массив формы данных y.train, содержащий 50 000 строк и 1 столбец. Точно так же набор данных x.test имеет 4-мерный массив вместе с 10 000 строк и изображением 32 * 32 пикселя с глубиной 3 (RGB). Форма данных y.test представляет собой двумерный массив с 10 000 строк и 1 столбцом.

Код выглядит следующим образом:

#Получить форму x.train

print('x.train shape:', x.train.shape)

#Получить форму y.train

печать ('y.train shape:', x.test.shape)

#Получить форму x.train

print('x.test shape :', x.test.shape)

#Получить форму y.train

print('y test shape :', y.test.shape)

Изображение, которое будет сгенерировано, будет находиться в наборе обучающих данных, подобно массиву numpy. Изображение будет создано как серия значений пикселей.

Индекс = 0

x.train [индекс]

Изображение = plt.imshow (x поезд [индекс])

Метка изображения: [6]

Классификация этикеток по номеру выглядит следующим образом:

Classify = [ ‘птица’, ‘самолет’, ‘кошка’, ‘лягушка’, ‘автомобиль’, ‘олень’, ‘корабль’, ‘собака’, ‘грузовик’ ]

#Распечатать класс изображения print («Класс изображения: ‘, classify [y.train [index] [0] ] )

Вы можете использовать One-Hot Encoding для преобразования заданных меток в набор из 10 чисел на вход и, наконец, в нейронную сеть. Номер курса соответствует количеству меток для классификации изображений.

y.train_one_hot = to_categorical (y_train)

y.test_one_hot = to_categorical (y_test)

Как только этот код написан, вы можете распечатать новые метки в наборе обучающих данных.

Печать (y.train_one_hot)

Теперь требуется нормализация пикселей, чтобы изображения имели значение от 0 до 1, а нормальные значения лежали между 0 и 255, это поможет в формировании нейронной сети.

x.train = x.train / 255

x.test = x.test / 255

Построение модели нейронной сети свертки

Для создания модели нам нужно создать архитектуру с помощью Sequential()

modl = последовательный ()

После этого добавьте первый слой свертки, чтобы извлечь функции входного изображения при создании 32 свернутых функций 5 * 5 ReLu, которые также называются картами функций. Поскольку это первый слой, мы должны знать, что форма размера входных данных представляет собой изображение размером 32 * 32 пикселя с глубиной 3 (RGB).

modl.add (Conv2D (32, (5,5), активация = ‘relu’),

input_shape = (32,32,3) ) )

Следующий слой будет объединяющим слоем вместе с фильтром 2*2 пикселей для извлечения этого максимального элемента из карты объектов. Это приводит к уменьшению размерности карт объектов вдвое, что также известно как подвыборка.

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

Теперь вам нужно создать еще один слой свертки вместе со слоем объединения, не включая input_shape.

modl.add (Conv2D (64, (5, 5), активация = ‘relu’ )) )

modl.add (MaxPooling2D (размер пула = (2, 2)) )

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

Modl.add (Свести () )

Создайте нейронную сеть прямо сейчас. Здесь первый слой имеет 1000 нейронов и функцию активации ReLu.

modl.add ( Dense (1000, активация = ‘relu’ ))

Добавление выпадающего слоя требуется с выпадением 50%

modl.add ( Dropout (0.5) )

Создание нейронной сети с первым слоем из 500 нейронов и функцией активации ReLu.

modl.add (Dense ( 500, активация = ‘relu’ ) )

Теперь добавляем выпадающий слой с выпадением 50%.

modl.add (выпадение ( 0,5 ))

Создание нейронной сети, в которой первый слой имеет 250 нейронов, а эти нейроны в первом слое имеют 250 нейронов и функцию активации ReLu.

modl.add ( Dense ( 250, активация = ‘relu’ ) ) )

Теперь создадим последний слой этой нейронной сети всего с 10 нейронами, по одному на каждую метку. Используйте функцию softmax.

modl.add ( Dense (10, активация = ‘softmax’ ) ) )

Вот как должна выглядеть модель CNN:

modl = Sequential ( ) modl.add ( Conv2D ( 32, (5, 5 ) , активация = ‘relu’ , input_shape = ( 32, 32, 3 )) )

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

modl.add ( Conv2D ( 64, (5, 5) , активация = ‘relu’ ) ) ) modl.add (MaxPooling2D (pool_size = (2, 2 )) )

modl.add (Свести () )

modl.add (Dense (1000, активация = ‘relu’ ))

мод. Добавить ( Исключение (0,5) )

modl.add (Dense (500, активация = ‘relu’ ))

modl.add (выпадение ( 0,5) )

modl.add (Dense (250, активация = ‘relu’))

modl.add (Dense (10, активация = ‘softmax’ ))

Выше упоминалось, как можно классифицировать изображение с помощью CNN. Если вы больше заинтересованы в изучении тонкостей, взгляните на Advanced Post Graduate Programme in Data Science and Machine Learning, предлагаемую NIIT. Это индивидуальный курс, специально разработанный для студентов, владеющих языками программирования и интересующихся наукой о данных.