Сверточная нейронная сеть - полезная тема для изучения в настоящее время, от распознавания изображений, анализа видео до обработки естественного языка, их приложения повсюду.
Что такое сверточная нейронная сеть [1]
Сверточная нейронная сеть (CNN или ConvNet) - это класс глубоких искусственных нейронных сетей с прямой связью, которые чаще всего применяются для анализа визуальных образов. Сверточные сети были вдохновлены биологическими процессами в том смысле, что паттерн связи между нейронами напоминает организацию зрительной коры головного мозга животных. У них есть приложения для распознавания изображений и видео, рекомендательных систем и обработки естественного языка.
Приложения CNN [2]:
- Распознавание изображений
- Видеоанализ
- Обработка естественного языка
- Открытие лекарств
- Оценка риска для здоровья и открытие биомаркеров старения
Почему я выбрал TensorFlow:
Есть много причин, которые сделали меня большим поклонником TF, я упомяну некоторые из них:
- Легко научиться
- У TF большое сообщество.
- TensorFlow является гибким и поддерживает множество типов моделей машинного обучения.
- Вы можете использовать графики для отладки ваших моделей.
Теперь мы собираемся построить CNN.
Этого так легко достичь, все, что вам нужно сделать, это выполнить следующие четыре шага:
Шаг 1 :
Импортируйте следующие модули:
import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D
Шаг 2 :
Загрузите свои данные, мои данные были готовы к использованию, и они были сохранены ранее как массив numpy:
X = np.load('X_data.npy') y = np.load('y_data.npy')
Не забудьте нормализовать данные:
X = X/255.0
Я разделил X на 255 из-за того, что мои данные содержат изображения в градациях серого.
Шаг 3 :
Определите модель. В нашем случае мы выбрали Последовательный (чтобы узнать больше об этом посетите https://goo.gl/2AvHg2):
model = Sequential()
Теперь добавьте несколько слоев:
Поскольку мы хотим создать сверточную нейронную сеть (CNN), мы будем использовать Conv2D в качестве первого и второго скрытых слоев. вполне нормально использовать более двух сверточных скрытых слоев, но в этом примере я буду использовать два.
1- Первый сверточный слой:
Я должен упомянуть, что на этом уровне мы должны указать форму наших входных данных, мы использовали X.shape [1:], чтобы получить форму наших входных данных. Также мы выберем relu в качестве нашей функции активации, relu означает выпрямленное линейное.
# Conv2D( number_of_filters , kernal_size , input_shape(add this parameter just for the input conv layer)) model.add(Conv2D(64 , (3,3) , input_shape = X.shape[1:] )) # define the activaion function for this layer model.add(Activation('relu')) # define the pooling for this layer model.add(MaxPooling2D(pool_size= (2,2)))
2- Второй сверточный слой:
model.add(Conv2D(64 , (3,3) )) # define the activaion function for this layer model.add(Activation('relu')) # define the pooling for this layer model.add(MaxPooling2D(pool_size= (2,2)))
3- Теперь добавьте плотный слой (с 64 узлами):
Но сначала вам нужно сгладить данные, Flatten () используется для преобразования трехмерных объектов в одномерные:
model.add(Flatten()) model.add(Dense(64))
4- Теперь добавьте выходной слой (с 1 выходным узлом):
На выходе будет 0 или 1.
model.add(Dense(1)) model.add(Activation('sigmoid'))
Шаг 4:
Настройте модель для обучения:
- функция потерь - это бинарная кроссентропия
- Оптимизатор: adam
- Показателем оценки будет точность.
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
Затем подгоните модель, в нашем случае мы будем использовать следующие параметры:
- batch_size = 32
- 3 эпохи
- 10% данных для проверки модели
model.fit(X, y, batch_size = 32, epochs = 3, validation_split = 0.1)
Поздравляю! , вы сделали свой первый CNN
Теперь, если вы хотите сохранить его, чтобы использовать его позже, не выполняя предыдущие шаги, вы можете использовать следующую строку:
model.save('myFirstCNN.model')
Наконец, если вы хотите распечатать сводку о своем CNN:
model.summary()
Заключение :
В наши дни свёрточная нейронная сеть является предметом, который необходимо изучать, особенно когда нам нужно разработать систему машинного обучения, которая имеет дело с изображениями в качестве входных данных.
Ресурсы :
Этот блокнот вдохновлен учебником, созданным Sentdix, вы можете найти его по адресу:
Другие источники :
[1]
Https://en.wikipedia.org/wiki/Convolutional_neural_network
[2] https://en.wikipedia.org/wiki/Convolutional_neural_network#Applications
[3]
Вы можете подписаться на меня в Twitter @ModMaamari