Преглед на внедряването на невронни мрежи

Изкуствените невронни мрежи са вдъхновени от биологични невронни мрежи. Невронните мрежи помагат да се решат проблемите, без да бъдат програмирани със специфичните за проблема правила и условия. Те са общи модели с повечето сложни математически изчисления като BlackBox. Различните видове невронни мрежи са като Convolution Neural Network, Recurrent Neural Network, Feedforward Neural Network, Multilayer perceptron и много други. В тази тема ни предстои да научим за внедряването на невронни мрежи.

Архитектурата на невронните мрежи

Има 3 слоя главно в невронните мрежи.

  • Входен слой
  • Скрити слоеве
  • Изходен слой

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

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

3. Изходен слой: Изходният слой съдържа броя на невроните въз основа на броя на изходните класове. Ако става въпрос за класификация на многокласните проблеми, тогава той съдържа броя на невроните, равен на броя на класовете. За двоична класификация съдържа един неврон.

Входовете се умножават с тегла и след това се подават в следващия скрит слой. Отклонението се дава и като вход заедно с претеглени входове. Претеглената сума се предава чрез нелинейна функция, наречена функция за активиране.

Пример за изпълнение

Ето примера за изпълнение, споменат по-долу

Инсталиране на библиотеки

Има много вградени библиотеки за внедряване на изкуствени невронни мрежи на различни езици за програмиране. Тук ще говорим за две от известните библиотеки tensorflow и Keras, използващи python като език за програмиране за внедряване на невронни мрежи. Керас е изграден api от по-високо ниво на tensorflow или theano като заден план. Много по-лесно е за изпълнение. Можете да изберете някоя от библиотеките за вашия модел. Има и други, които също се предлагат като PyTorch, theano, Caffe и много други.

За да инсталирате tensorflow / 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))

  • Различна функция за активиране може да се използва според проблема. Някои общи функции за активиране са активацията на релу, активирането на тена, пропускащата релу и много други.
  • След това идва напълно свързан слой преди плътния слой. Те компилират данните, извлечени от предишни слоеве, за да формират крайния изход.
  • Размерът на изходния слой зависи от броя класове. Функциите за активиране, използвани за изходния слой, са обикновено сигмоидно активиране за двоично класифициране и активиране на 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)))

обучение

Обучението на модела изглежда така,

Заключение - Внедряване на невронни мрежи

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

Препоръчителни статии

Това е ръководство за внедряване на невронни мрежи. Тук обсъждаме архитектурата и внедряването на Neural Networks с модел за обучение и примерен код. Можете също да разгледате следната статия, за да научите повече -

  1. Класификация на невронната мрежа
  2. Какво е невронни мрежи?
  3. Конволюционни невронни мрежи
  4. Алгоритми на невронната мрежа
  5. 2D графика в Java

Категория: