MİMARİLER VE "BACK PROPAGATION"
Ref: Machine Learning: An Algorithmic Perspective 2nd Edition
Gördüğümüz üzere girdiler ağırlıklarla çarpılıyor, bunların hepsi toplanıyor ve elde edilen sayı "step" fonksiyonuna tabi tutuluyor. Bunun sonucunda 0 veya 1 elde ediyoruz. Tabi bu en sondaki fonksiyon oldukça önemli, genellikle "step" fonksiyonu çok tercih edilmiyor.
Bu tek nörona çoğu yerde "perceptron" da denilmektedir.
Yukarıda bahsettiğimiz yapınının birden fazla bağlantılı ve ara katmanlara ship olduğu bir mimari düşünün:
Ref: Pattern Recognition, Duda & Hart
Yukarıdaki şekilde 3 katmanlı bir mimari görüyoruz. Biraz terminoloji verelim şimdi:
"Backpropagation"
Ref: DataCamp - Deep Learning Course
İşin matematiğine çok girmeden "backpropagation" ile ilgili bazı kilit noktaları listeleyelim
"Scikit-Learn" kütüphanesini kullanarak bir örnek yapabiliriz.
# sklearn sınıflandırıcısı çağrılıyor
from sklearn.neural_network import MLPClassifier
# make moons veri seti bu işler için kullanılır genellikle
from sklearn.datasets import make_moons
# Eğitim ve test setini ayırmamız gerekirse
from sklearn.model_selection import train_test_split
# Seaborn dark theme tercihimizdir :)
import seaborn as sns
sns.set_style("darkgrid")
import matplotlib.pyplot as plt
# colormap kullanmak için
from matplotlib.colors import ListedColormap
%matplotlib notebook
# veri sınırlarını çizdirmek için kütüphanemizden ilgili
import sys
sys.path.append("..")
from datafloyd.plot import plot_decision_region
# Spiral bir veri seti oluÅŸturur
X, y = make_moons(n_samples=1000, noise=0.15, random_state=42)
plt.figure()
ax = plt.axes()
cm = plt.cm.RdBu
# mavi ve kırmızı bir colormap olsun
cm_bright = ListedColormap(['#FF0000', '#0000FF'])
# veri setini görelim
ax.scatter(X[:,0],X[:,1],c=y,cmap=cm_bright);
Eğitim ve test olacak şekilde setimizi ayıralım
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4,random_state=0)
tanh aktivasyon fonksiyonunu kullanarak eğitimi gerçekleştirelim ve sadece 3'lük bir gizli katmanımız olsun.
NN = MLPClassifier(hidden_layer_sizes=[3],activation="tanh",solver="lbfgs",random_state=0)
NN.fit(X_train,y_train);
plt.figure()
plot_decision_region(X_test,y_test,NN)
plt.title("[3] gizli katman");
Gizli katman ile biraz oynayalım. Bunu 2 adet 10'luk katman haline getirelim.
NN = MLPClassifier(hidden_layer_sizes=[10,10],activation="tanh",solver="lbfgs",random_state=0)
NN.fit(X_train,y_train);
plt.figure()
plot_decision_region(X_test,y_test,NN)
plt.title("[10,10] gizli katman");