Přehled implementace neuronových sítí

Umělé neuronové sítě jsou inspirovány biologickými neuronovými sítěmi. Neuronové sítě pomáhají řešit problémy, aniž by byly naprogramovány podle pravidel a podmínek specifických pro daný problém. Jsou to obecné modely s většinou složitých matematických výpočtů jako BlackBox. Různé typy neuronových sítí jsou jako neuronová síť konvoluce, opakující se neuronová síť, dopředná neuronová síť, vícevrstvý perceptron a mnoho dalších. V tomto tématu se snažíme dozvědět více o implementaci neuronových sítí.

Architektura neuronových sítí

Existují 3 vrstvy hlavně v neuronových sítích.

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

1. Vstupní vrstva: Vstupní vrstva obsahuje neurony pro vstup funkcí. Ke vstupním vrstvám je navíc k prvkům přidána ještě jedna zkreslení. Pokud tedy existuje n funkcí, pak vstupní vrstva obsahuje n + 1 neurony.

2. Skrytá vrstva: Skryté vrstvy jsou mezilehlé vrstvy mezi vstupní a výstupní vrstvou. Může existovat libovolný počet skrytých vrstev. Síť s více než jednou skrytou vrstvou se nazývá hluboké neuronové sítě. Neurony ve skryté vrstvě získávají vstup ze vstupní vrstvy a dávají výstup do výstupní vrstvy.

3. Výstupní vrstva: Výstupní vrstva obsahuje počet neuronů na základě počtu výstupních tříd. Pokud jde o klasifikační problém s více třídami, pak obsahuje počet neuronů rovný počtu tříd. Pro binární klasifikaci obsahuje jeden neuron.

Vstupy se násobí váhami a poté se zavedou do další skryté vrstvy. Předpojatost je také uváděna jako vstup spolu s váženými vstupy. Vážený součet prochází nelineární funkcí zvanou aktivační funkce.

Příklad implementace

Níže je uveden příklad implementace

Instalace knihoven

Existuje mnoho vestavěných knihoven pro implementaci umělých neuronových sítí v různých programovacích jazycích. Tady budeme hovořit o dvou slavných knihovnách tensorflow a Keras využívajících Python jako programovací jazyk pro implementaci neuronových sítí. Keras je api na vyšší úrovni postavený na tensorflow nebo theano jako backend. Implementace je mnohem jednodušší. Můžete si vybrat kteroukoli z knihoven pro váš model. K dispozici jsou také další, jako PyTorch, theano, Caffe a mnoho dalších.

Chcete-li nainstalovat tensorflow / Keras pomocí pip, spusťte následující příkaz:

pip install tensorflow
pip install Keras

Alternativně jej lze nainstalovat pomocí příkazu conda,

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

Implementace

Zde budeme hovořit o Kerasu pro generování hlubokých modelů učení. Je to open-source knihovna Python s hlubokým učením.

  • Importujte dostupný datový soubor MNIST. MNIST je soubor dat ručně psaný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 parametry a hyperparametry potřebné pro model.
  • Poté inicializujte model hlubokého učení.

model = Sequential()

  • Přidejte konvoluční vrstvu, aktivační vrstvu a max. Sdružovací vrstvu pro každou z konvoluční vrstvy, kterou přidáváme mezi vstupní a výstupní vrstvu (skryté vrstvy). Zde přidáváme dvě vrstvy konvoluce.

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

  • Podle problému lze použít různé aktivační funkce. Některé běžné aktivační funkce jsou reluová aktivace, tanhova aktivace netěsná relu a mnoho dalších.
  • Potom přichází plně hustá vrstva před hustou vrstvu. Zkompilují data extrahovaná předchozími vrstvami a vytvoří konečný výstup.
  • Dimenze výstupní vrstvy závisí na počtu tříd. Aktivační funkce použité pro výstupní vrstvu jsou obvykle sigmoidní aktivace pro binární klasifikaci a aktivace softmaxu pro třídní klasifikaci.

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

Kompletní kód pro hlubokou konvoluční neuronovou síť pro klasifikaci MNIST dat je uveden níže.

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

Výcvik modelu vypadá,

Závěr - Implementace neuronových sítí

Neuronové sítě poskytují snadný způsob pro klasifikaci nebo regresní problémy ve strojovém učení, když je prostor funkcí vzorků velmi velký hlavně pro velké obrázky nebo jiná multimédia nebo signály.

Doporučené články

Toto je průvodce implementací neuronových sítí. Zde diskutujeme o architektuře a implementaci Neural Networks s tréninkovým modelem a ukázkovým kódem. Další informace naleznete také v následujícím článku -

  1. Klasifikace neuronové sítě
  2. Co je to neuronové sítě?
  3. Konvoluční neuronové sítě
  4. Algoritmy neuronových sítí
  5. 2D grafika v Javě

Kategorie: