Обзор внедрения нейронных сетей

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

Архитектура нейронных сетей

Есть 3 слоя в основном в нейронных сетях.

  • Входной слой
  • Скрытые слои
  • Выходной слой

1. Входной слой: входной слой содержит нейроны для ввода объектов. Существует также одно смещение, добавленное к входному слою в дополнение к функциям. Таким образом, если имеется n объектов, то входной слой содержит n + 1 нейронов.

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

3. Выходной слой: выходной слой содержит количество нейронов в зависимости от количества выходных классов. Если это проблема классификации нескольких классов, то она содержит количество нейронов, равное количеству классов. Для двоичной классификации он содержит один нейрон.

Входные данные умножаются на веса и затем подаются в следующий скрытый слой. Смещение также дается в качестве входных данных наряду с взвешенными входными данными. Взвешенная сумма передается через нелинейную функцию, называемую функцией активации.

Пример реализации

Вот пример реализации, упомянутый ниже

Установка библиотек

Существует множество встроенных библиотек для реализации искусственных нейронных сетей на разных языках программирования. Здесь мы поговорим о двух известных библиотеках tenorflow и Keras, использующих python в качестве языка программирования для реализации нейронных сетей. Keras - это высокоуровневая API-версия, основанная на тензорном потоке или theano в качестве внутреннего интерфейса. Это намного проще для реализации. Вы можете выбрать любую из библиотек для вашей модели. Есть и другие, такие как PyTorch, theano, Caffe и многие другие.

Чтобы установить tenorflow / Keras с помощью pip, выполните следующую команду:

pip install tensorflow
pip install Keras

Кроме того, он может быть установлен с помощью команды conda,

conda install -c conda-forge tensorflow
conda install -c conda-forge keras

Реализация

Здесь мы поговорим о керасе для генерации моделей глубокого обучения. Это библиотека глубокого изучения Python с открытым исходным кодом.

  • Импортируйте доступный набор данных MNIST. MNIST - это набор рукописных цифр английских цифр.

from tensorflow.examples.tutorials.mnist import input_data
train_images = mnist.train.images.reshape(mnist.train.images.shape(0), image_rows, image_cols, 1)
test_images = mnist.test.images.reshape(mnist.test.images.shape(0), image_rows, image_cols, 1)

  • Инициализируйте параметры и гиперпараметры, необходимые для модели.
  • Затем инициализируйте модель глубокого обучения.

model = Sequential()

  • Добавьте слой свертки, слой активации и слой максимального пула для каждого слоя свертки, который мы добавляем между входным и выходным слоями (скрытые слои). Здесь мы добавляем два слоя свертки.

model.add(Convolution2D(num_filters, conv_kernel_size(0), conv_kernel_size(1), border_mode='valid', input_shape=imag_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=max_pool_size))

  • Различные функции активации могут быть использованы в соответствии с проблемой. Некоторыми общими функциями активации являются активация по принципу relu, активация по утечке и многое другое.
  • Затем наступает полностью связанный слой перед плотным слоем. Они компилируют данные, извлеченные предыдущими слоями, чтобы сформировать окончательный результат.
  • Размерность выходного слоя зависит от количества классов. Функции активации, используемые для выходного слоя, обычно включают сигмовидную активацию для двоичной классификации и softmax для мультиклассовой классификации.

model.add(Dense(num_classes))
model.add(Activation('softmax'))

Полный код для глубоко сверточной нейронной сети для классификации данных MNIST приведен ниже.

from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Convolution2D, MaxPooling2D
# we use TF helper function to pull down the data from the MNIST site mnist_data = input_data.read_data_sets("MNIST_data/", one_hot=True)
img_rows = 28
img_cols = 28
# Reshape training and test images to 28x28x1
train_images = mnist_data.train.images.reshape(mnist_data.train.images.shape(0), img_rows, img_cols, 1)
test_images = mnist_data.test.images.reshape(mnist_data.test.images.shape(0), img_rows, img_cols, 1)
num_of_filters = 32 # No. of conv filters maxPoolSize = (2, 2) # shape of max_pool convKrnSize = (3, 3) # conv kernel shape imgShape = (28, 28, 1) num_of_classes = 10
dropProb = 0.5
model = Sequential()
# define layers in NN
# Define 1st convolution layer.
model.add(Convolution2D(num_of_filters, convKrnSize(0), convKrnSize(1), border_mode='valid', input_shape=imgShape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=maxPoolSize))
# 2nd Convolution Layer
model.add(Convolution2D(num_of_filters, convKrnSize(0), convKrnSize(1))) model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=maxPoolSize))
#Fully Connected Layer model.add(Flatten())
model.add(Dense(128)) #Fully connected layer in Keras model.add(Activation('relu'))
# Dropout some neurons to reduce overfitting model.add(Dropout(dropProb))
#Readout Layer model.add(Dense(num_of_classes))
model.add(Activation('softmax'))
# Compile the model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=('accuracy'))
# Training settings batch_size = 128
num_of_epoch = 2
# fit the training data to the model.
model.fit(train_images, mnist_data.train.labels, batch_size=batch_size,
nb_epoch=num_of_epoch, verbose=1, validation_data=(test_images, mnist_data.test.labels))
# predict the test_data using the model
test_labels_predicted = model.predict_classes(test_images)
# To get the predicted labels of all test images for i in range(len(test_images)):
print ("Image () -> Label ()".format(i+1, test_labels_predicted(0)))

Повышение квалификации

Обучение модели выглядит так,

Вывод - внедрение нейронных сетей

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

Рекомендуемые статьи

Это руководство по внедрению нейронных сетей. Здесь мы обсуждаем архитектуру и реализацию нейронных сетей с обучающей моделью и примером кода. Вы также можете посмотреть следующую статью, чтобы узнать больше -

  1. Классификация нейронной сети
  2. Что такое нейронные сети?
  3. Сверточные нейронные сети
  4. Алгоритмы нейронной сети
  5. 2D-графика в Java