Not: Bu yazı, öğrendiğim bilgileri daha iyi pekiştirmek ve yanlış bir yorum yapmamak adına GPT-4o tarafından incelenmiş ve düzenlenmiştir.
Bu yazıda aslında direkt olarak uygulamalı bir şekilde konuya giriyoruz amacımız aslında kanlı canlı bir örnek görmek teknik ayrıntılar ve matematiksel düzey ilerleyen kısımlarda açıklanacak ancak benim öğrenme yöntemime göre uygulamalı bir şekilde ofansif ilerlemek her zaman daha hızlı ve etkili bir öğrenme yöntemi olmuştur. Bundan dolayı aslında bir sinir ağı modeli oluşturup daha sonrasında bununla ilgili bir test yapacağız. Elimden geldiğincede aslında kodları açıklamaya çalışacağım ancak bu yazıda eğer benim gibi ilk defa derin öğrenme dünyasına giriş yapıyorsanız genel olarak konsepti anlamanız yeterli olacaktır, her şeyi anlamı beklemeyin.
Ayrıca buradaki kodları çalıştırmak için eğer benim gibi Apple Silicon kullanıyorsanız bir önceki yazıdaki lab ortamını kurmanız gerekecektir.
Giriş: Yapay Zekâdan Derin Öğrenmeye Adım Adım
Yapay zekâ (AI), hayatımızın neredeyse her alanına dokunmaya başladı. Görüntü tanıma, sesli asistanlar, dil çevirileri ve öneri sistemleri gibi uygulamalar, aslında derin öğrenme (Deep Learning) modellerinin birer sonucudur. Ancak, bu kavramlar bazen soyut ve karmaşık gelebilir.
Bu yazıda, yapay zekâ, makine öğrenmesi ve derin öğrenme gibi kavramların ne anlama geldiğini, senaryo bazlı açıklamalar kullanarak anlatacağım. Hedefimiz, MNIST veri seti üzerinde basit bir yapay sinir ağı (ANN) kurarak el yazısı rakamları tanıyan bir model geliştirmek.
Kodun her adımında kullanılan Flatten, Dense, ReLU, Softmax gibi kavramları, günlük hayattan örneklerle açıklayarak konuya derinlemesine dalacağız.
1. Yapay Zekâ, Makine Öğrenmesi ve Derin Öğrenme
Yapay Zekâ (AI)
Yapay zekâ, makinelerin insan gibi düşünmesini, karar vermesini ve problemleri çözmesini sağlayan bir alandır. AI’nin temel amacı, insan zekâsının taklit edilmesini sağlamaktır.
Gerçek Hayattan Senaryo:
Bir satranç oynayan yapay zekâyı düşün. Rakip hamle yaptığında, yapay zekâ binlerce olasılığı gözden geçirir ve en iyi hamleyi seçer. Tıpkı bir satranç ustasının her hamle öncesi hamleleri analiz etmesi gibi.
Makine Öğrenmesi (ML)
Makine öğrenmesi, yapay zekânın bir alt dalıdır. Model, verilerden öğrenir ve bu öğrendiklerini gelecekteki veriler üzerinde kullanır.
Gerçek Hayattan Senaryo:
Bir çocuğa elma ve muz gösterdiğinizi düşünün. Çocuk, bu meyveleri rengine ve şekline göre tanımayı öğrenir. Bir süre sonra, çocuğa farklı bir elma gösterdiğinizde elma olduğunu hemen fark eder. İşte makine öğrenmesi, verilerden öğrenerek gelecekteki verileri tanımlama sürecidir.
Derin Öğrenme (DL)
Derin öğrenme, makine öğrenmesinin bir alt dalıdır. Yapay sinir ağları (Artificial Neural Networks) kullanılarak büyük veri setlerinden öğrenilir. Derin öğrenme, genellikle görüntü işleme, ses tanıma ve doğal dil işleme gibi büyük veri içeren alanlarda kullanılır.
Gerçek Hayattan Senaryo:
Çocuğa elmayı farklı ışıkta, farklı açılardan gösterdiğinizi düşünün. Çocuk, zamanla bu farklı türdeki elma görüntülerini de tanımaya başlar. Derin öğrenme, makine öğrenmesine kıyasla daha karmaşık desenleri algılar ve öğrenir.
2. MNIST Veri Seti Nedir?
MNIST (Modified National Institute of Standards and Technology), el yazısı rakamlardan oluşan bir veri setidir. Yapay sinir ağları ve derin öğrenme uygulamalarında en yaygın kullanılan veri setlerinden biridir.
- Eğitim seti: 60.000 örnek
- Test seti: 10.000 örnek
- Her Görüntü: 28x28 piksel boyutunda gri tonlamalı el yazısı rakamlar (0-9)
3. Model Kurulumu ve Eğitimi
Aşağıdaki kod, MNIST veri seti üzerinde bir yapay sinir ağı modelinin eğitimini içeriyor. Kodun tamamını adım adım inceleyeceğiz.
Kod: MNIST Veri Seti ile Model Eğitimi
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.utils import to_categorical
import matplotlib.pyplot as plt
# 1. Veri Setini Yükle
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# 2. Görselleştirme
plt.imshow(x_train[0], cmap='gray')
plt.title(f'Etiket: {y_train[0]}')
plt.show()
# 3. Veriyi Normalize Et
x_train = x_train / 255.0
x_test = x_test / 255.0
# 4. Etiketleri Kategorik Hale Getir
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# 5. Modeli Kur
model = Sequential()
model.add(Flatten(input_shape=(28, 28)))
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))
# 6. Modeli Derle
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 7. Modeli Eğit
model.fit(x_train, y_train, epochs=10, batch_size=32)
# 8. Modeli Test Et
loss, accuracy = model.evaluate(x_test, y_test)
print(f'Test doğruluğu: {accuracy:.2f}')
# 9. Modeli Kaydet
model.save('mnist_advanced_model.h5')
print(f'Model kaydedildi!')
Bu kodun çıktısı aşağıdaki gibi olacaktır.
(tf_env) berenkudaygorun@Beren-MacBook-Pro Derin Öğrenmeye Giriş % python3 main.py
2024-12-25 23:08:07.872 python3[43257:2133548] +[IMKClient subclass]: chose IMKClient_Modern
2024-12-25 23:08:07.872 python3[43257:2133548] +[IMKInputSession subclass]: chose IMKInputSession_Modern
2024-12-25 23:08:09.703889: I metal_plugin/src/device/metal_device.cc:1154] Metal device set to: Apple M1 Pro
2024-12-25 23:08:09.703917: I metal_plugin/src/device/metal_device.cc:296] systemMemory: 16.00 GB
2024-12-25 23:08:09.703921: I metal_plugin/src/device/metal_device.cc:313] maxCacheSize: 5.33 GB
2024-12-25 23:08:09.703951: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:306] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2024-12-25 23:08:09.703968: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:272] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
Epoch 1/10
2024-12-25 23:08:10.069060: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:117] Plugin optimizer for device_type GPU is enabled.
1875/1875 [==============================] - 16s 8ms/step - loss: 0.3691 - accuracy: 0.8949
Epoch 2/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.3136 - accuracy: 0.9128
Epoch 3/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.3183 - accuracy: 0.9125
Epoch 4/10
1875/1875 [==============================] - 16s 8ms/step - loss: 0.3273 - accuracy: 0.9107
Epoch 5/10
1875/1875 [==============================] - 16s 9ms/step - loss: 0.3420 - accuracy: 0.9087
Epoch 6/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.3550 - accuracy: 0.9080
Epoch 7/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.3658 - accuracy: 0.9071
Epoch 8/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.3813 - accuracy: 0.9055
Epoch 9/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.3968 - accuracy: 0.9045
Epoch 10/10
1875/1875 [==============================] - 15s 8ms/step - loss: 0.4147 - accuracy: 0.9018
313/313 [==============================] - 3s 9ms/step - loss: 0.4249 - accuracy: 0.9088
Test doğruluğu: 0.91
/Users/berenkudaygorun/miniforge3/envs/tf_env/lib/python3.9/site-packages/keras/src/engine/training.py:3079: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.
saving_api.save_model(
Model kaydedildi!
(tf_env) berenkudaygorun@Beren-MacBook-Pro Derin Öğrenmeye Giriş %
Kodun Ayrıntılı Açıklaması
Flatten Katmanı Nedir?
Flatten(input_shape=(28, 28))
- Görev: 28x28 boyutundaki görüntüyü 1 boyutlu 784 uzunluğunda bir vektöre dönüştürür.
Senaryo:
- Bir yapbozun tüm parçalarını düz bir sıra halinde dizdiğinizi düşünün. Yapboz 28x28 karelerden oluşuyor. Flatten, bu kareleri tek satır halinde sıralar.
Dense Katmanı Nedir?
Dense(128, activation='relu')
- Görev: Tam bağlantılı bir katmandır. Her nöron, bir sonraki katmandaki tüm nöronlarla bağlıdır.
- units=128: Bu katmanda 128 nöron olacağını belirtir.
Senaryo:
- Bir öğretmenin sınıftaki tüm öğrencilere aynı anda ders anlatması gibi düşünebilirsiniz. Öğretmen (nöron) her öğrenciye (nöron) bilgiyi aktarır.
ReLU Aktivasyon Fonksiyonu Nedir?
activation='relu'
- Görev: Negatif değerleri sıfıra çevirir, pozitif değerleri ise olduğu gibi bırakır.
- Avantaj: Hesaplama maliyeti düşüktür ve derin sinir ağlarında yaygın olarak kullanılır.
Senaryo:
- Bir musluğu düşünün. Hafif açıldığında su akar (pozitif değerler), kapatıldığında su akmaz (negatif değerler sıfır olur).
Softmax Aktivasyon Fonksiyonu Nedir?
Dense(10, activation='softmax')
- Görev: Çıkış katmanında kullanılır. Model, 10 sınıf (0-9 arası rakamlar) için olasılık hesaplar. Her sınıfa bir olasılık verir ve toplamı 1 olur.
- Neden 10? Çünkü el yazısı rakamları 0'dan 9'a kadar olan 10 farklı sınıfa aittir.
Senaryo:
- Bir sınavda 10 şıklı bir soru çözüyorsunuz. Her şık için bir ihtimal vardır. Model, en yüksek ihtimali seçer.
Modeli Derleme (compile)
model.compile()
- optimizer='adam': Optimizasyon algoritmasıdır. Modelin daha hızlı ve verimli öğrenmesini sağlar.
- loss='categorical_crossentropy': Çok sınıflı sınıflandırma problemlerinde kullanılır.
- metrics=['accuracy']: Modelin doğruluğunu ölçmek için kullanılır.
Senaryo:
- Bir öğrenciye çalışma planı hazırlamak gibi düşünebilirsiniz. Optimizasyon (adam), öğrencinin verimli çalışmasını sağlar, kayıp fonksiyonu (loss) hata miktarını belirler ve doğruluk (accuracy) öğrencinin sınavdaki başarısını ölçer.
4. Modelin Test Edilmesi ve Görselleştirilmesi
Model eğitildikten sonra test verisi üzerinde çalıştıracağız. Rastgele seçilen 10 test verisi görselleştirilip, modelin tahminleri incelenecek.
Kod: Modelin Test Edilmesi ve Görselleştirilmesi
import tensorflow as tf
from tensorflow.keras.models import load_model
import matplotlib.pyplot as plt
import numpy as np
# 1. Modeli Yükle
model = load_model('mnist_advanced_model.h5')
print("Model başarıyla yüklendi.")
# 2. Test Verisini Yükle
(_, _), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# 3. Veriyi Normalize Et
x_test = x_test / 255.0
# 4. Rastgele 10 Test Görseli Seç
random_indices = np.random.choice(len(x_test), 10)
test_images = x_test[random_indices]
test_labels = y_test[random_indices]
# 5. Modeli Kullanarak Tahmin Yap
predictions = model.predict(test_images)
# 6. Tahminleri Göster
plt.figure(figsize=(10, 4))
for i in range(10):
plt.subplot(2, 5, i + 1)
plt.imshow(test_images[i], cmap='gray')
plt.title(f'Tahmin: {np.argmax(predictions[i])}\nGerçek: {test_labels[i]}')
plt.axis('off')
plt.tight_layout()
plt.show()
Yukarıdaki kodun çıktısı ise aşağıdaki gibi oldu:
Son derece başarılı!
(tf_env) berenkudaygorun@Beren-MacBook-Pro Derin Öğrenmeye Giriş % python3 test.py
2024-12-25 23:11:23.271839: I metal_plugin/src/device/metal_device.cc:1154] Metal device set to: Apple M1 Pro
2024-12-25 23:11:23.271881: I metal_plugin/src/device/metal_device.cc:296] systemMemory: 16.00 GB
2024-12-25 23:11:23.271886: I metal_plugin/src/device/metal_device.cc:313] maxCacheSize: 5.33 GB
2024-12-25 23:11:23.271917: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:306] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2024-12-25 23:11:23.271933: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:272] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
Model başarıyla yüklendi.
2024-12-25 23:11:23.608327: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:117] Plugin optimizer for device_type GPU is enabled.
1/1 [==============================] - 0s 56ms/step
2024-12-25 23:11:24.216 python3[43363:2137900] +[IMKClient subclass]: chose IMKClient_Modern
2024-12-25 23:11:24.216 python3[43363:2137900] +[IMKInputSession subclass]: chose IMKInputSession_Modern
2024-12-25 23:11:35.306 python3[43363:2137900] The class 'NSSavePanel' overrides the method identifier. This method is implemented by class 'NSWindow'
(tf_env) berenkudaygorun@Beren-MacBook-Pro Derin Öğrenmeye Giriş %
Kodun Ayrıntılı Açıklaması
Modelin Yeniden Yüklenmesi
model = load_model()
- Daha önce eğitilen modeli tekrar yüklemek için kullanılır.
Senaryo:
- Bir dosyayı bilgisayarınızda yeniden açmak gibi düşünebilirsiniz. Model kaydedilir ve tekrar açıldığında aynı kaldığı yerden kullanılabilir.
Görselleştirme (Matplotlib)
plt.imshow()
- Görselleri ekranda göstermek için kullanılır.
Senaryo:
- Bir fotoğraf albümüne bakmak gibidir. Görselleri tek tek inceleyebilir ve modelin yaptığı tahminleri gözlemleyebilirsiniz.
Tahmin Yapma
model.predict()
- Test verisi üzerinde tahmin yapmak için kullanılır.
Senaryo:
- Bir doktora röntgen göstermek gibi. Doktor (model), röntgene bakarak hastalığı tahmin eder. Model, test görüntülerine bakarak rakamları tahmin eder.
5. Sonuç ve İleri Düzey Adımlar
Bu model, basit bir yapay sinir ağı örneğidir. Daha karmaşık modeller oluşturmak için ConvNet (CNN) gibi yapılar kullanılarak modelin doğruluğu artırılabilir.
Modelin doğruluğunu artırmak için:
- Ek Katmanlar (Dense) eklenebilir.
- Dropout Katmanları kullanılarak aşırı öğrenme (overfitting) önlenebilir.
- Veri Çoğaltma (Data Augmentation) yaparak model daha fazla veriyle eğitilebilir.
6. İzlenmesi Gereken Kaynaklar
1. Derin Öğrenme 4 Sıfırdan MNIST Yapay Sinir Ağı (YouTube)
Bu videoda, tamamen numpy kullanarak sıfırdan bir yapay sinir ağı oluşturuluyor ve MNIST veri seti üzerinde uygulanıyor.
2. Yapay Sinir Ağları ve Python'da Kodlanması (YouTube)
Yapay sinir ağları algoritmasının detayları, modelin sunulması ve Python'da kodlanması adım adım anlatılıyor.
3. Derin Öğrenme Serisi-10 | MNIST Veri Seti Üzerinde Convolutional Neural Network (YouTube)
Kendi Convolutional Neural Network modelinizi kurarak MNIST veri seti üzerinde nasıl çalışabileceğinizi gösteren bir video.
4. PYTHON ile YAPAY SİNİR AĞLARI ALGORİTMASI (YouTube)
Yapay sinir ağlarının ne olduğu, veri analizi ve parametre ayarları gibi konuların ele alındığı kapsamlı bir ders.
5. TENSORFLOW & KERAS ile DERİN ÖĞRENME'ye Giriş (YouTube)
TensorFlow ve Keras kullanarak derin öğrenmeye giriş yapmak isteyenler için temel bilgilerin aktarıldığı bir video.
İlk Yorumu Siz Yapın