Sinir Ağları ve Derin Öğrenme — XI : Python-Numpy ile Alıştırmalar

Eren Bozarık
SMLR CENTER
Published in
3 min readMar 20, 2020
Sigmoid Fonksiyonu

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 v
image = 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 loss
yhat = 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 loss
yhat = 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

--

--

Eren Bozarık
SMLR CENTER

Sr. Data Scientist & SWE | Galatasaray University