Omówienie implementacji sieci neuronowych

Sztuczne sieci neuronowe są inspirowane biologicznymi sieciami neuronowymi. Sieci neuronowe pomagają w rozwiązywaniu problemów bez programowania się z regułami i warunkami specyficznymi dla danego problemu. Są to ogólne modele z większością skomplikowanych obliczeń matematycznych, takich jak BlackBox. Różne typy sieci neuronowych to Convolution Neural Network, Recurrent Neural Network, Feedforward Neural Network, wielowarstwowy perceptron i wiele innych. W tym temacie chcemy zapoznać się z implementacją sieci neuronowych.

Architektura sieci neuronowych

Istnieją 3 warstwy, głównie w sieciach neuronowych.

  • Warstwa wejściowa
  • Ukryte warstwy
  • Warstwa wyjściowa

1. Warstwa wejściowa: warstwa wejściowa zawiera neurony do wprowadzania cech. Oprócz funkcji dodano również jedno odchylenie do warstwy wejściowej. Więc jeśli jest n cech, wówczas warstwa wejściowa zawiera n + 1 neuronów.

2. Ukryta warstwa: Ukryte warstwy są warstwami pośrednimi między warstwami wejściową i wyjściową. Może być dowolna liczba ukrytych warstw. Sieć z więcej niż jedną ukrytą warstwą nazywa się głębokimi sieciami neuronowymi. Neurony w ukrytej warstwie są pobierane z warstwy wejściowej i przekazują dane wyjściowe do warstwy wyjściowej.

3. Warstwa wyjściowa: Warstwa wyjściowa zawiera liczbę neuronów na podstawie liczby klas wyjściowych. Jeśli jest to problem z klasyfikacją wielu klas, zawiera liczbę neuronów równą liczbie klas. Do klasyfikacji binarnej zawiera jeden neuron.

Dane wejściowe są mnożone przez ciężary, a następnie wprowadzane do następnej ukrytej warstwy. Odchylenie jest również podawane jako dane wejściowe wraz z ważonymi danymi wejściowymi. Ważona suma jest przekazywana przez funkcję nieliniową zwaną funkcją aktywacji.

Przykład realizacji

Oto przykład implementacji wymieniony poniżej

Instalacja bibliotek

Istnieje wiele wbudowanych bibliotek do implementacji sztucznych sieci neuronowych w różnych językach programowania. Tutaj porozmawiamy o dwóch słynnych bibliotekach tensorflow i Keras wykorzystujących Python jako język programowania do implementacji sieci neuronowych. Keras to interfejs API wyższego poziomu oparty na tensorflow lub theano jako backend. Jest znacznie łatwiejszy do wdrożenia. Możesz wybrać dowolną bibliotekę dla swojego modelu. Istnieje również kilka innych, takich jak PyTorch, theano, Caffe i wiele innych.

Aby zainstalować tensorflow / Keras za pomocą pip, uruchom następujące polecenie:

pip install tensorflow
pip install Keras

Alternatywnie można go zainstalować za pomocą polecenia conda,

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

Realizacja

Tutaj porozmawiamy o Keras do generowania modeli głębokiego uczenia. Jest to biblioteka do głębokiego uczenia Pythona typu open source.

  • Zaimportuj dostępny zestaw danych MNIST. MNIST to zbiór danych odręcznych cyfr angielskich.

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)

  • Zainicjuj parametry i hiperparametry niezbędne dla modelu.
  • Następnie zainicjuj model głębokiego uczenia się.

model = Sequential()

  • Dodaj warstwę splotu, warstwę aktywacji i warstwę puli maksymalnej dla każdej warstwy splotu, którą dodajemy między warstwą wejściową i wyjściową (warstwy ukryte). Tutaj dodajemy dwie warstwy splotu.

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

  • W zależności od problemu można zastosować inną funkcję aktywacji. Niektóre typowe funkcje aktywacyjne to aktywacja relu, aktywacja tanh nieszczelna relu i wiele innych.
  • Potem pojawia się w pełni połączona warstwa przed gęstą warstwą. Kompilują dane wyodrębnione przez poprzednie warstwy, tworząc ostateczny wynik.
  • Wymiar warstwy wyjściowej zależy od liczby klas. Funkcje aktywacyjne stosowane dla warstwy wyjściowej to na ogół aktywacja sigmoidalna dla klasyfikacji binarnej i aktywacja softmax dla klasyfikacji wieloklasowej.

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

Pełny kod głębokiej splotowej sieci neuronowej do klasyfikacji danych MNIST jest jak poniżej.

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

Trening

Trening modelu wygląda,

Wniosek - wdrożenie sieci neuronowych

Sieci neuronowe zapewniają łatwy sposób na problemy z klasyfikacją lub regresją w uczeniu maszynowym, gdy przestrzeń funkcji próbek jest bardzo duża głównie dla dużych obrazów lub innych multimediów lub sygnałów.

Polecane artykuły

Jest to przewodnik po implementacji sieci neuronowych. Tutaj omawiamy architekturę i implementację sieci neuronowych za pomocą modelu szkoleniowego i przykładowego kodu. Możesz także spojrzeć na następujący artykuł, aby dowiedzieć się więcej -

  1. Klasyfikacja sieci neuronowej
  2. Co to są sieci neuronowe?
  3. Konwolucyjne sieci neuronowe
  4. Algorytmy sieci neuronowej
  5. Grafika 2D w Javie

Kategoria: