Pregled izvajanja nevronskih mrež

Umetna nevronska omrežja se zgledujejo po bioloških nevronskih mrežah. Nevronske mreže pomagajo rešiti težave, ne da bi bili programirani s posebnimi pravili in pogoji. So generični modeli z večino zapletenih matematičnih izračunov kot BlackBox. Različne vrste nevronskih omrežij so kot Convolucijska nevronska mreža, ponavljajoča se nevronska mreža, povratna nevronska mreža, večplastni perceptron in mnogi drugi. V tej temi nas čaka spoznanje o izvajanju nevronskih mrež.

Arhitektura nevronskih mrež

V nevronskih mrežah obstajajo 3 plasti.

  • Vhodni sloj
  • Skriti plasti
  • Izhodni sloj

1. Vhodni sloj: Vhodna plast vsebuje nevrone za vnos funkcij. Poleg dodanih funkcij je v vhodni sloj dodana tudi ena pristranskost. Če torej obstaja n funkcij, potem vhodni sloj vsebuje n + 1 nevrona.

2. Skrita plast: skriti sloji so vmesni sloji med vhodno in izhodno plastjo. Skritih slojev je lahko poljubno število. Omrežje z več kot eno skrito plastjo imenujemo globoke nevronske mreže. Nevroni v skriti plasti dobijo vhod iz vhodne plasti in dajejo izhod izhodni plasti.

3. Izhodni nivo : Izhodni sloj vsebuje število nevronov glede na število izhodnih razredov. Če gre za težavo z razvrstitvijo v več razredov, potem vsebuje število nevronov enako številu razredov. Za binarno razvrstitev vsebuje en nevron.

Vhodi se pomnožijo z utežmi in nato napajajo v naslednjo skrito plast. Tudi pristranskost je podana kot vložek skupaj s tehtanimi vhodi. Utežena vsota se prenese skozi nelinearno funkcijo, imenovano aktivacijska funkcija.

Primer izvajanja

Spodaj je naveden primer izvedbe

Namestitev knjižnic

Obstaja veliko vgrajenih knjižnic za izvajanje umetnih nevronskih mrež v različnih programskih jezikih. Tu bomo govorili o dveh znanih knjižnicah tensorflow in Keras, ki uporabljata python kot programski jezik za izvajanje nevronskih mrež. Keras je višja api gradnja na tensorflowu ali theanu kot podpora. Izvedba je veliko lažja. Za svoj model lahko izberete katero koli knjižnico. Na voljo so tudi nekateri drugi, kot so PyTorch, theano, Caffe in številni drugi.

Če želite namestiti tensorflow / Keras s pomočjo pipa, zaženite naslednji ukaz:

pip install tensorflow
pip install Keras

Lahko pa ga namestimo tudi z ukazom conda,

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

Izvajanje

Tu bomo govorili o Kerasu za generacijo modelov globokega učenja. To je odprtokodna knjižnica Python globokega učenja.

  • Uvoz razpoložljivega nabora MNIST. MNIST je nabor podatkov ročno napisanih številk angleških številk.

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)

  • Inicializirajte parametre in hiperparametre, potrebne za model.
  • Nato inicializirajte model globokega učenja.

model = Sequential()

  • Dodajte sloj uvajanja, aktivacijski sloj in maks. Združevalni sloj za vsako uvojno plast, ki jo dodajamo med vhodno in izhodno plastjo (skriti sloji). Tukaj dodajamo dve slojni sloji.

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

  • Glede na težavo je mogoče uporabiti različne funkcije aktiviranja. Nekatere pogoste aktivacijske funkcije so relu aktivacija, tanh aktivacija puščajoča relu in številne druge.
  • Nato pride popolnoma povezan sloj pred gosto plastjo. Zbirajo podatke, ki jih pridobijo prejšnji sloji, da tvorijo končni izid.
  • Dimenzija izhodne plasti je odvisna od števila razredov. Aktivacijske funkcije, ki se uporabljajo za izhodni sloj, so na splošno sigmoidno aktiviranje za binarno klasifikacijo in softmax aktiviranje za razvrstitev v več razredov.

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

Celotna koda globoke konvolucijske nevronske mreže za razvrstitev podatkov MNIST je spodaj.

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

Usposabljanje

Trening modela izgleda tako,

Zaključek - Izvajanje nevronskih mrež

Nevronske mreže omogočajo enostaven način za težave s klasifikacijo ali regresijo pri strojnem učenju, ko je značilnost prostora vzorcev zelo velika, predvsem za velike slike ali druge multimedije ali signale.

Priporočeni članki

To je vodnik za izvajanje nevronskih mrež. Tukaj razpravljamo o arhitekturi in izvajanju Nevronskih mrež z modelom za usposabljanje in vzorčno kodo. Če želite izvedeti več, si oglejte tudi naslednji članek -

  1. Razvrstitev nevronske mreže
  2. Kaj so nevronske mreže?
  3. Konvolucijsko nevronsko omrežje
  4. Algoritmi nevronske mreže
  5. 2D grafika na Javi

Kategorija: