Sinir Ağları ve Derin Öğrenme — XI : Python-Numpy ile Alıştırmalar
Python Numpy ile sigmoid fonksiyonunu yazalım.
import numpy as np
def sigmoid(x):
s = 1/(1+np.exp(-x))
return s
Bir dizi oluşturup sigmoid fonksiyonuna gönderip sonuçları inceleyelim.
x = np.array([1, 2, 3])
sigmoid(x)
Sonuçlar : array([ 0.73105858, 0.88079708, 0.95257413])Burada dikkat ederseniz sonuçlar 1 ve 0 arasında.
Sigmoid Gradyanı
Sigmoid fonksiyonunun türevini alıp, python fonksiyonunu yazalım.
def sigmoid_turev(x):
s =sigmoid(x)
ds = s*(1-s)
return ds
Yine bir diziyi bu fonksiyona yönlendirip sonuçları gözetelim.
x = np.array([1, 2, 3])
print ("sigmoid_turev(x) = " + str(sigmoid_turev(x)))
Sonuç: sigmoid_turev(x) = [ 0.19661193 0.10499359 0.04517666]
Dizilerin Yeniden Şekillendirilmesi
Burada np.shape() ve np.reshape() fonksiyonlarının kullanımını inceleyeceğiz
- X.shape() fonksiyonu X matrisinin boyutları hakkında size bilgi verir.
- X.reshape(…) fonksiyonu X matrisinizin boyutlarında değişiklik yapmanıza olanak tanır.
Resmin Vektöre Dönüştürülmesi (Image2Vector)
Resim : uzunluk, yükseklik, derinlik şeklinde bir numpy dizisi.
Return değerimiz ise bu verilerin 1 kolon olacak şekilde “reshape” edilmiş hali.
def image2vector(image):
v = image.reshape((image.shape[0]*image.shape[1]*image.shape[2]), 1)
return vimage = np.array([[[ 0.67826139, 0.29380381],
[ 0.90714982, 0.52835647],
[ 0.4215251 , 0.45017551]],
[[ 0.92814219, 0.96677647],
[ 0.85304703, 0.52351845],
[ 0.19981397, 0.27417313]],
[[ 0.60659855, 0.00533165],
[ 0.10820313, 0.49978937],
[ 0.34144279, 0.94630077]]])
Bu, 3 x 3 boyutlu bir dizidir, genellikle resimler (num_px_x, num_px_y, 3) şeklinde olacak; Burada ki 3 RGB değerlerini temsil ediyor
print ("image2vector(image) = " + str(image2vector(image)))
Sonuç :
[[ 0.67826139] [ 0.29380381] [ 0.90714982] [ 0.52835647] [ 0.4215251 ] [ 0.45017551] [ 0.92814219] [ 0.96677647] [ 0.85304703] [ 0.52351845] [ 0.19981397] [ 0.27417313] [ 0.60659855] [ 0.00533165] [ 0.10820313] [ 0.49978937] [ 0.34144279] [ 0.94630077]]
Satırları Normalleştirme
Makine Öğrenmesi ve Derin Öğrenme’de kullanılan diğer bir yaygın teknik, verilerimizi normalleştirmektir. Dereceli alçalma normalleştirme sonrasında daha hızlı yakınsama işlemi yaptığı için genellikle daha iyi bir performans alınıyor.
Burada yaptığımız şey x’in her satır vektörünü normuna bölmek. Şimdi bu işlemin python fonksiyonunu yazalım.
def normalizeRows(x):
x_norm = np.linalg.norm(x, ord = 2, axis = 1, keepdims = True)
x = x/ x_norm
return x
Bu fonksiyonu bir matris üzerinde deneyelim.
x = np.array([
[0, 3, 4],
[1, 6, 4]])
print("normalizeRows(x) = " + str(normalizeRows(x)))
Sonuç :
normalizeRows(x) = [[ 0. 0.6 0.8 ] [ 0.13736056 0.82416338 0.54944226]]
L1 ve L2 Hata (Loss) Fonksiyonlarının uygulanması
def L1(yhat, y):
loss = np.sum(abs(y - yhat))
return lossyhat = np.array([.9, 0.2, 0.1, .4, .9])
y = np.array([1, 0, 0, 1, 1])
print("L1 = " + str(L1(yhat,y)))
Sonuç : L1 = 1.1
def L2(yhat, y):
loss = np.dot((y-yhat),(y-yhat))
return lossyhat = np.array([.9, 0.2, 0.1, .4, .9])
y = np.array([1, 0, 0, 1, 1])
print("L2 = " + str(L2(yhat,y)))
Sonuç : L2 = 0.43