Prehľad implementácie neurónových sietí

Umelé neurónové siete sú inšpirované biologickými neurálnymi sieťami. Neurónové siete pomáhajú riešiť problémy bez toho, aby boli naprogramované podľa pravidiel a podmienok špecifických pre daný problém. Sú to všeobecné modely s väčšinou zložitých matematických výpočtov ako BlackBox. Rôzne typy neurónových sietí sú ako neurónová sieť konvolúcie, opakujúca sa neurónová sieť, dopredná neurónová sieť, viacvrstvový perceptrón a mnoho ďalších. V tejto téme sa snažíme dozvedieť sa viac o implementácii neurónových sietí.

Architektúra neurónových sietí

Existujú 3 vrstvy hlavne v neurónových sieťach.

  • Vstupná vrstva
  • Skryté vrstvy
  • Výstupná vrstva

1. Vstupná vrstva: Vstupná vrstva obsahuje neuróny na zadávanie funkcií. Do vstupnej vrstvy sa navyše k prvkom pridáva ešte jedna zaujatosť. Ak teda existuje n prvkov, potom vstupná vrstva obsahuje n + 1 neurónov.

2. Skrytá vrstva: Skryté vrstvy sú prechodné vrstvy medzi vstupnou a výstupnou vrstvou. Môže existovať ľubovoľný počet skrytých vrstiev. Sieť s viac ako jednou skrytou vrstvou sa nazýva hlboké neurónové siete. Neuróny v skrytej vrstve dostávajú vstup zo vstupnej vrstvy a dávajú výstup do výstupnej vrstvy.

3. Výstupná vrstva: Výstupná vrstva obsahuje počet neurónov na základe počtu výstupných tried. Pokiaľ ide o problém klasifikácie viacerých tried, potom obsahuje počet neurónov rovný počtu tried. Pre binárnu klasifikáciu obsahuje jeden neurón.

Vstupy sa vynásobia váhami a potom sa zavedú do nasledujúcej skrytej vrstvy. Predpojatosť je tiež uvedená ako vstup spolu s váženými vstupmi. Vážený súčet prechádza nelineárnou funkciou nazývanou aktivačná funkcia.

Príklad implementácie

Tu je príklad implementácie uvedený nižšie

Inštalácia knižníc

Existuje veľa vstavaných knižníc na implementáciu umelých neurónových sietí v rôznych programovacích jazykoch. Tu budeme hovoriť o dvoch zo slávnych knižníc tensorflow a Keras, ktoré používajú python ako programovací jazyk na implementáciu neurónových sietí. Keras je api na vyššej úrovni postavený na tensorflow alebo theano ako backend. Implementácia je omnoho jednoduchšia. Môžete si vybrať ktorúkoľvek z knižníc pre svoj model. Existujú aj iné, ako PyTorch, theano, Caffe a mnoho ďalších.

Ak chcete nainštalovať tensorflow / Keras pomocou pip, spustite nasledujúci príkaz:

pip install tensorflow
pip install Keras

Inak môže byť nainštalovaný pomocou príkazu conda,

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

uskutočnenie

Tu budeme hovoriť o Kerase pre generovanie modelov hlbokého učenia. Je to otvorená zdrojová knižnica Pythonu s otvoreným zdrojom.

  • Importujte dostupný súbor údajov MNIST. MNIST je súbor údajov ručne písaných číslic anglických číslic.

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)

  • Inicializujte parametre a hyperparametre potrebné pre model.
  • Potom inicializujte model hlbokého učenia.

model = Sequential()

  • Pridajte konvolučnú vrstvu, aktivačnú vrstvu a maximálnu spoločnú vrstvu pre každú z konvolučnej vrstvy, ktorú pridávame medzi vstupnú a výstupnú vrstvu (skryté vrstvy). Tu pridávame dve vrstvy konvolúcie.

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))

  • Podľa problému môžu byť použité rôzne aktivačné funkcie. Niektoré bežné aktivačné funkcie sú aktivácia relu, netesná relácia aktivácie a mnoho ďalších.
  • Potom prichádza plne hustá vrstva pred hustú vrstvu. Zostavujú údaje extrahované predchádzajúcimi vrstvami a vytvárajú konečný výstup.
  • Dimenzia výstupnej vrstvy závisí od počtu tried. Aktivačné funkcie použité pre výstupnú vrstvu sú všeobecne sigmoidná aktivácia pre binárnu klasifikáciu a aktivácia softmaxu pre klasifikáciu viacerých tried.

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

Kompletný kód pre hlbokú konvolučnú neurónovú sieť na klasifikáciu údajov MNIST je uvedený nižšie.

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)))

výcvik

Tréning modelu vyzerá takto:

Záver - Implementácia neurónových sietí

Neurónové siete poskytujú jednoduchý spôsob klasifikácie alebo regresných problémov v strojovom učení, keď je priestor funkcií vzoriek veľmi veľký hlavne pre veľké obrázky alebo iné multimédiá alebo signály.

Odporúčané články

Toto je sprievodca implementáciou neurónových sietí. Tu diskutujeme o architektúre a implementácii Neural Networks pomocou tréningového modelu a vzorového kódu. Viac informácií nájdete aj v nasledujúcom článku -

  1. Klasifikácia neurónovej siete
  2. Čo sú neurónové siete?
  3. Konvolučné neurónové siete
  4. Algoritmy neurónovej siete
  5. 2D grafika v Jave

Kategórie: