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

Что такое сверточная нейронная сеть [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

Вам также может понравиться :