Огляд впровадження нейронних мереж

Штучні нейронні мережі надихають біологічні нейронні мережі. Нейронні мережі допомагають вирішувати проблеми, не запрограмовані на конкретні проблеми та умови. Вони є загальними моделями з більшістю складних математичних обчислень як BlackBox. Різні типи нейронних мереж на зразок нейронної мережі Convolution, періодичної нейронної мережі, нейронної мережі Feedforward, багатошарового перцептрона та багатьох інших. У цій темі нам належить дізнатись про реалізацію нейронних мереж.

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

В нейромережах є 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))

  • Відповідно до проблеми можна використовувати різні функції активації. Деякі поширені функції активації - активація relu, активація tanh reaky 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

Категорія: