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 -
- Neuraaliverkoston luokittelu
- Mikä on hermoverkot?
- Neuvontaverkot
- Neuraaliverkon algoritmit
- 2D-grafiikka Java-versiossa