Ülevaade närvivõrkude rakendamisest

Kunstlikud närvivõrgud on inspireeritud bioloogilistest närvivõrkudest. Neuraalsed võrgud aitavad probleeme lahendada, ilma et oleks programmeeritud probleemipõhiste reeglite ja tingimustega. Need on üldmudelid enamiku keerukate matemaatiliste arvutustega nagu BlackBox. Erinevat tüüpi närvivõrgud on näiteks konvolutsioonneuraalvõrk, korduv närvivõrgustik, Feedforwardi närvivõrk, mitmekihiline perceptroon ja paljud teised. Selles teemas on meil alustuseks õppida tundma närvivõrkude rakendamist.

Neuraalsete võrkude arhitektuur

Peamiselt närvivõrkudes on 3 kihti.

  • Sisestuskiht
  • Varjatud kihid
  • Väljundkiht

1. Sisestuskiht: sisendkiht sisaldab funktsioonide sisestamiseks neuroneid. Sisendkihile on lisaks funktsioonidele lisatud ka üks eelarvamusi. Nii et kui funktsioone on n, sisaldab sisendkiht n + 1 neuroni.

2. Varjatud kiht: peidetud kihid on vahekihid sisend- ja väljundkihtide vahel. Peidetud kihte võib olla ükskõik kui palju. Rohkem kui ühe varjatud kihiga võrku nimetatakse sügavateks närvivõrkudeks. Varjatud kihi neuronid saavad sisendi sisendkihist ja nad annavad väljundi väljundkihile.

3. Väljundkiht: väljundkiht sisaldab väljundklasside arvu põhjal neuronite arvu. Kui see on mitme klassi klassifitseerimise probleem, sisaldab see neuronite arvu, mis on võrdne klasside arvuga. Binaarseks klassifitseerimiseks sisaldab see ühte neuroni.

Sisendid korrutatakse kaaludega ja sisestatakse seejärel järgmisesse peidetud kihti. Eelsoodumus antakse koos kaalutud sisenditega ka sisendina. Kaalutud summa kantakse läbi mittelineaarse funktsiooni, mida nimetatakse aktiveerimisfunktsiooniks.

Rakendusnäide

Siin on allpool toodud rakendusnäite mainimine

Raamatukogude paigaldamine

Kunstlike närvivõrkude rakendamiseks erinevates programmeerimiskeeltes on palju sisseehitatud teeke. Siin räägime kahest kuulsast raamatukogust tensorflow ja Kerast, kes kasutavad pythonit närvivõrkude rakendamiseks programmeerimiskeelena. Keras on kõrgem tase api, mis põhineb taustal tensorflow'il või theano'l. Rakendamine on palju lihtsam. Võite valida oma mudeli jaoks ükskõik millise raamatukogu. Saadaval on ka mõned teised, näiteks PyTorch, theano, Caffe ja palju muud.

Tensorflow / Kerase installimiseks pipi abil käivitage järgmine käsk:

pip install tensorflow
pip install Keras

Teise võimalusena saab selle installida käsuga conda,

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

Rakendamine

Siin räägime Kerast süvaõppe mudelite genereerimiseks. See on avatud lähtekoodiga Pythoni süvaõppe raamatukogu.

  • Impordi saadaolev MNIST-i andmekogum. MNIST on ingliskeelsete numbrite käsitsi kirjutatud numbrite andmekogum.

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)

  • Käivitage mudeli jaoks vajalikud parameetrid ja hüperparameetrid.
  • Seejärel lähtestage sügava õppe mudel.

model = Sequential()

  • Lisage konvolutsioonikiht, aktiveerimiskiht ja max-poolimise kiht igale konversioonikihile, mille lisame sisend- ja väljundkihi (peidetud kihid) vahel. Lisame siia kaks konvolutsioonikihti.

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

  • Probleemi jaoks võib kasutada erinevat aktiveerimisfunktsiooni. Mõned levinumad aktiveerimisfunktsioonid on relu aktiveerimine, tanh aktiveerimine lekitav relu ja paljud teised.
  • Seejärel tuleb enne tihedat kihti täielikult ühendatud kiht. Nad kompileerivad lõplike väljundite saamiseks eelmiste kihtide eraldatud andmed.
  • Väljundkihi mõõtmed sõltuvad klasside arvust. Väljundkihi jaoks kasutatavad aktiveerimisfunktsioonid on tavaliselt sigmoidne aktiveerimine binaarseks klassifitseerimiseks ja softmax aktiveerimine mitme klassi klassifitseerimiseks.

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

MNIST-andmete klassifitseerimiseks mõeldud sügava konvolutsioonilise närvivõrgu täielik kood on järgmine.

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

Treening

Mudeli koolitus näeb välja selline,

Järeldus - närvivõrkude rakendamine

Neuraalvõrgud pakuvad lihtsat viisi masinõppes klassifitseerimise või regressiooniprobleemide lahendamiseks, kui proovide funktsiooniruum on väga suur peamiselt suurte piltide või muude multimeediumite või signaalide jaoks.

Soovitatavad artiklid

See on juhend närvivõrkude rakendamiseks. Siin käsitleme neuronvõrkude ülesehitust ja rakendamist koos koolitusmudeli ja proovikoodiga. Lisateabe saamiseks võite vaadata ka järgmist artiklit -

  1. Neuraalvõrgu klassifikatsioon
  2. Mis on närvivõrgud?
  3. Konvolutsioonilised närvivõrgud
  4. Neuraalvõrgu algoritmid
  5. 2D graafika Java-s

Kategooria: