Первоначально опубликовано на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. Это индивидуальный курс, специально разработанный для студентов, владеющих языками программирования и интересующихся наукой о данных.