İçeriğe geç

Giriş ve NumPy – Derin Öğrenme Gün 1

Giriş

Daha öncelerinde çok sefer aslında Derin Öğrenme, Yapay Zeka vb bir sürü eğitime başladım ancak çeşitli sebeplerden dolayı istediğim gibi ilerletemedim. Yüksek lisans sürecinde de bir miktar bu dersleri aldım ancak istediğim seviyede değildi. Yapay zekayı aktif olarak kullanıyorum, her türlü verimi almaya çalışıyorum ve bir noktada bu aşırı verimli olma durumu insanın canını da sıkabiliyor. Çünkü aslında kısa sürede çok fazla task kapattığımızdan dolayı kendimizi verimli sanıyoruz. Şöyle bir farkındalık yaşadım. Çalışırken bir iş aldığımda bunu kafamda yapmak gerçekten çok uzun sürecekmiş gibi geliyor ama daha sonrasında bekide Claude'a yada OpenAI'ya kodu yazdırarak 10dk'da yapabiliyorum. İşe başlayana kadar bu işin uzun sürecek bir iş olacağı düşüncesi aklımda oldğu için psikolojik olarak beni yoruyor daha sonrasında iş çok hızlı bir şekilde tamamlanıyor ve bende kendimi verimli sanıyorum. Eğer bir işe başlamadan önce o işin çok uzun süreceğini düşünüp tahmini bir sür veremyirsak aslında tek başına o işi kendimiz yapayız demektir. Çünkü her türlü ihtimali değerlendiremiyoruz ve tahmini bir süre kafamızda bulamıyoruz.

Bu durum benim için çok da sorun değildi açıkçası çünkü yapay zeka aslında bilginin artık önemli olmaldığı bir dünyaya doğru bizi sürüklüyordu. Birşeyi bilmenin çok bir önemi kalmayacak gibi ya da o bilgi eskisi kadar değerli olmayacak çünkü bilgiye ulaşmak çok daha hızlı gerçekleşek. Bu yüzde herhangi bir şekilde aslında bu durumu sorun etmiyordum kafamda. Ancak dün gece bir bir haber gördüm X'te. Belki zamanla linkler öleblir diye birkaç link paylaşacağım.

Hepimiz özgürce ulaşacaktık ama kendi firmalarında çalışan Amerikalı olmayan mühendislerin bile kullanamayacağı söylentileri dolaşıyor. İşte bu, bilgiye kolay ulaşım fikrini altüst etti. Bunun üzerine artık yavaştan öğrenmem gerektiğini düşünüyorum. Oldukça fazla kurs araştırdım. Aslında en kalitelileri youtube üzerinde olanlar sanırım. Direkt olarak Harward'ın kursları var. Ancak ilk olarak ben fazla teoride kaybolmadığım önce pratik sonra teorik modelle ilerlemek istiyorum. Zor konuları bu şekilde daha hızlı anladığımı işin teorisinin daha iyi oturduğunu dşünüyorum. Bundan dolayı Udemy'den bir kurs (https://www.udemy.com/course/derin-ogrenme-bootcamp/learn) aldım. Bu kursu gün gün devam ettireceğim ve bir seri oluşturacağım.

NumPy

NumPy kütüphanesini temel olarak öğrenme ile başladık. 1. gün kısmında genel olarak kütüphanenin kısa bir tanıtımı, basit matris oluşturma örnekleri, matrislerle daha sornaında 4 işlemler, shape, reshape ve transpoz gibi konulara değindik. Bu süre zarfı boyunca eğitimde gördüğüm şeyleride vscode üzerinden yazıp deniyorum sürekli. İşte basit denemeler ve çıktıları:

import numpy as np

list1 = [1, 2, 3, 4, 5]
list2 = [5,4,3,2,1]

array1 = np.array(list1)
array2 = np.array(list2)

print("Array1's max value is: ")
print(array1.max())
Array1's max value is: 
5

Normal listelerde toplama işlemleri ile numpy dizilerindeki toplama yani matris toplamalarındaki fark:

print("Normal addition of lists and arrays: ")
print(list1 + list2)
print(array1 + array2)
Normal addition of lists and arrays: 
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1]
[6 6 6 6 6]

Listelerde çarpma işlemi diye bir şey yok. Ama matris çarpması yapabiliriz.

print("Normal multiplication of arrays: ")
print(array1 * array2)
Normal multiplication of arrays: 
[5 8 9 8 5]

Rastgele matrisler oluşturma örnekleri:

random_array = np.random.rand(3, 4)
print("Random array: ")
print(random_array)

rand_int_array = np.random.randint(1, 10, 2)
print("Random integer array: ") 
print(rand_int_array)
Random array: 
[[0.06424452 0.6036594  0.33775679 0.89582491]
 [0.18581727 0.10011355 0.34459622 0.48196824]
 [0.03895807 0.87636734 0.81279525 0.8933949 ]]
Random integer array: 
[3 3]

Matirslerde elemanlara indexler aracılığı ile nasıl ulaşılabileceği:

print("Matris indexkleri: ")
print(random_array[0, 0])
print(random_array[1, 2])
Matris indexkleri: 
0.06424451600303871
0.34459622009487534

Shape dediğimiz konu:

print("Matris shape:")
print(random_array.shape)
Matris shape:
(3, 4)

Burada demek oluyorki aslında bu dizi 2 boyutluymuş. 3 satır ve 4 elemandan oluşuyor.
Tek boyutlu matrislerde mesela array1 için shape değeri [5,] şeklinde gmsteriliyor. Bu aslına onun 1 boyutlu 5 elemanlı bir matris olduğunu ya da vektör olduğunu ifade eder.

Daha sonrasında çarpma işlemi:

print("----------------------------------")
print("Matris dot product: ")
print("array1: ")
print(array1)
print("Shape of array1: ")
print(array1.shape)
print("Transpose of array1: ")
print(array1.T)
print("Shape of transpose of array1: ")
print(array1.T.shape)
print("Dot product of array1 and its transpose: ")
print(np.dot(array1, array1.T))
----------------------------------
Matris dot product: 
array1: 
[1 2 3 4 5]
Shape of array1: 
(5,)
Transpose of array1: 
[1 2 3 4 5]
Shape of transpose of array1: 
(5,)
Dot product of array1 and its transpose: 
55

Bana gerçekten tuhaf gelen Boolean Indexing kavramı:

print("----------------------------------")
print("Boolean indexing: ")
random_matrix1 = np.random.randint(1,100,20)
print("Random matrix1: ")
print(random_matrix1)
print("Bigger than 50: ")
print(random_matrix1[random_matrix1 > 50])
Boolean indexing: 
Random matrix1: 
[ 2 36 25 51 38 81 51  6 36 74 25 72 28 56 53  5 52 36  6 18]
Bigger than 50: 
[51 81 51 74 72 56 53 52]

Reshape yöntemi:

print("----------------------------------")
print("Reshaping arrays: ")
print("Original array1: ")
print(array1)
print("Reshaped array1: ")
print(array1.reshape(5, 1))
----------------------------------
Reshaping arrays: 
Original array1: 
[1 2 3 4 5]
Reshaped array1: 
[[1]
 [2]
 [3]
 [4]
 [5]]

Ve ufak bir egzersiz işlemi aslında. Bu egzersiz işleminde broadcasting işleminide görüyoruz. Broadcasting, farklı boyutlardaki arraylar otomatik olarak genişletilip işleme sokma işidir, z_scores = (array1 - mean) / std kodunda olduğu gibi.

print("----------------------------------")
print("Z Score normalization: ")
mean = np.mean(array1)
std = np.std(array1)
z_scores = (array1 - mean) / std
print("Z Scores: ")
print(z_scores)
print("Outliers: ")
print(array1[z_scores > 1])
----------------------------------
Z Score normalization: 
Z Scores: 
[-1.41421356 -0.70710678  0.          0.70710678  1.41421356]
Outliers: 
[5]
Kategori:Uncategorized

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir