Yleiskatsaus hermoverkkojen toteutuksesta

Keinotekoiset hermostoverkot ovat inspiroituneet biologisista hermoverkoista. Neuraaliverkot auttavat ratkaisemaan ongelmat ilman, että niitä on ohjelmoitu ongelmakohtaisilla säännöillä ja ehdoilla. Ne ovat yleisiä malleja, joissa on suurin osa monimutkaisista matemaattisista laskelmista kuten BlackBox. Eri tyyppisiä hermoverkkoja ovat kuten Convolution Neural Network, toistuva hermoverkko, Feedforward Neural Network, monikerroksinen perceptron ja monet muut. Tässä aiheesta aiomme oppia hermoverkkojen toteuttamisesta.

Neuraaliverkkojen arkkitehtuuri

Pääasiassa hermoverkoissa on 3 kerrosta.

  • Syöttökerros
  • Piilotetut kerrokset
  • Tulostuskerros

1. Syöttökerros: Tulokerros sisältää neuronit ominaisuuksien syöttämistä varten. Ominaisuuksien lisäksi tulokerrokseen on lisätty yksi harha. Joten jos ominaisuuksia on n, syöttökerros sisältää n + 1 neuronia.

2. Piilotettu kerros: Piilotetut kerrokset ovat välikerroksia tulo- ja lähtökerrosten välillä. Piilotettuja tasoja voi olla mikä tahansa määrä. Verkkoa, jossa on useampi kuin yksi piilotettu kerros, kutsutaan syviksi hermoverkoiksi. Piilotetun kerroksen neuronit saavat tulon tulokerroksesta ja ne antavat ulostulon lähtökerrokselle.

3. Lähtökerros: Lähtökerros sisältää neuronien määrän lähtöluokkien lukumäärän perusteella. Jos se on moniluokkainen luokitteluongelma, niin se sisältää neuronien lukumäärän, joka on yhtä suuri kuin luokkien lukumäärä. Binaariluokitusta varten se sisältää yhden neuronin.

Tulot kerrotaan painoilla ja syötetään sitten seuraavaan piilotettuun kerrokseen. Bias annetaan myös tulona painotettujen tulojen ohella. Painotettu summa johdetaan epälineaarisen funktion, nimeltään aktivointitoiminto, läpi.

Toteutusesimerkki

Tässä on jäljempänä mainittu toteutusesimerkki

Kirjastojen asennus

Keinotekoisten hermoverkkojen toteuttamiseen eri ohjelmointikielellä on monia sisäänrakennettuja kirjastoja. Tässä puhutaan kahdesta kuuluisasta kirjastosta tensorflow ja Keras, jotka käyttävät pythonia hermoverkkojen toteuttamisohjelmointikielenä. Keras on korkeamman tason sovelluspohja, joka perustuu tensorflow: iin tai theanoon taustana. Se on paljon helpompaa toteuttaa. Voit valita minkä tahansa mallisi kirjastoista. Jotkut muut myös saatavilla, kuten PyTorch, theano, Caffe ja monet muut.

Asenna tensorflow / Keras pip avulla suorittamalla seuraava komento:

pip install tensorflow
pip install Keras

Vaihtoehtoisesti se voidaan asentaa Conda-komennolla,

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

Toteutus

Tässä puhutaan Kerasista syvän oppimisen mallien sukupolveksi. Se on avoimen lähdekoodin Python-syvän oppimisen kirjasto.

  • Tuo käytettävissä oleva MNIST-tietojoukko. MNIST on englanninkielisten käsin kirjoitettujen numeroiden tietojoukko.

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)

  • Alusta mallille tarvittavat parametrit ja hyperparametrit.
  • Alusta sitten syvän oppimisen malli.

model = Sequential()

  • Lisää konvoluutiokerros, aktivointikerros ja max-pooling kerros jokaiselle konvoluutiokerrokselle, jonka lisäämme tulo- ja lähtökerroksen (piilotetut kerrokset) väliin. Lisäämme tähän kaksi konvoluutiokerrosta.

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

  • Erilaisia ​​aktivointitoimintoja voidaan käyttää ongelman mukaan. Jotkut yleiset aktivointitoiminnot ovat reluaktivointi, tanh-aktivointi vuotava relu ja monet muut.
  • Sitten tulee täysin kytketty kerros ennen tiheää kerrosta. He kokoavat aikaisempien kerrosten erottamat tiedot lopullisen tuloksen muodostamiseksi.
  • Lähtökerroksen ulottuvuus riippuu luokkien lukumäärästä. Lähtökerrokseen käytetyt aktivointitoiminnot ovat yleensä sigmoidiaktivointi binaariluokitukseen ja softmax-aktivointi moniluokkaiseen luokitteluun.

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

MNIST-datan luokittelulle tarkoitetun syvän konvoluutiohermoston täydellinen koodi on seuraava.

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

koulutus

Mallin koulutus näyttää,

Johtopäätös - Neuraaliverkkojen toteuttaminen

Neuraaliverkot tarjoavat helpon tavan luokittelu- tai regressio-ongelmiin koneoppimisessa, kun näytteiden ominaisuudet ovat erittäin suuret lähinnä suurille kuville tai muille multimediaille tai signaaleille.

Suositellut artikkelit

Tämä on opas hermoverkkojen toteuttamiseen. Tässä keskustellaan hermoverkkojen arkkitehtuurista ja toteutuksesta koulutusmallilla ja näytekoodilla. Voit myös tarkastella seuraavaa artikkelia saadaksesi lisätietoja -

  1. Neuraaliverkoston luokittelu
  2. Mikä on hermoverkot?
  3. Neuvontaverkot
  4. Neuraaliverkon algoritmit
  5. 2D-grafiikka Java-versiossa

Luokka: