Ana içeriğe atla

TensorFlow ile Evrişimli Sinir Ağları (CNN) Eğitimi

TensorFlow Framework 2 ile Python’da Evrişimli Sinir Ağlarının (CNN) nasıl kurulup uygulanacağını öğrenin
Güncel 3 Eki 2026  · 15 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Bir hayvanat bahçesinde, verilen bir hayvanın çita mı yoksa leopar mı olduğunu anlamaya çalıştığınızı hayal edin. Bir insan olarak beyniniz, vücut ve yüz hatlarını zahmetsizce analiz ederek geçerli bir sonuca varabilir. Aynı şekilde, Evrişimli Sinir Ağları (CNN’ler) de, kalıplar ne kadar karmaşık olursa olsun, aynı tanıma görevini yerine gelecek şekilde eğitilebilir. Bu da onları bilgisayarla görme alanında güçlü kılar. 

Bu kavramsal CNN eğitimi, önce CNN’lerin ne olduğuna ve makine öğrenimindeki önemine genel bir bakış sunacak. Ardından TensorFlow Framework 2’de CNN’in adım adım bir uygulamasında size yol gösterecek.

CNN nedir?

Evrişimli Sinir Ağı (CNN veya ConvNet), nesne tanımanın kritik olduğu görüntü sınıflandırma, tespit ve bölümleme gibi her türlü görev için özel olarak tasarlanmış bir derin öğrenme algoritmasıdır.  Otonom araçlar, güvenlik kameraları ve daha pek çok gerçek hayat uygulaması CNN’leri kullanır. 

CNN’lerin önemi

Aşağıda vurgulandığı gibi, CNN’lerin önemli olmasının birkaç nedeni vardır:

  • Elle öznitelik çıkarımı gerektiren SVM ve karar ağaçları gibi geleneksel makine öğrenimi modellerinin aksine, CNN’ler büyük ölçekte otomatik öznitelik çıkarımı yapabilir, bu da onları verimli kılar. 
  • Evrişim katmanları CNN’leri çeviri değişmez kılar; yani görüntü döndürülmüş, ölçeklenmiş veya kaydırılmış olsa bile, veriden kalıpları tanıyabilir ve öznitelikleri konumdan bağımsız olarak çıkarabilirler.
  • VGG-16, ResNet50, Inceptionv3 ve EfficientNet gibi birçok önceden eğitilmiş CNN modelinin son teknoloji sonuçlara ulaştığı kanıtlanmıştır ve nispeten az miktarda veriyle yeni görevlere ince ayar yapılabilir. 
  • CNN’ler, doğal dil işleme, zaman serisi analizi ve konuşma tanıma dâhil olmak üzere görüntü dışı sınıflandırma problemlerinde de kullanılabilir.

Bir CNN’in mimarisi

CNN’lerin mimarisi, her biri veride belirli bir özniteliği tespit etmekle sorumlu çoklu katmanlardan oluşan insan görsel sistemindeki nöronların yapısını taklit etmeye çalışır.  Aşağıdaki görselde olduğu gibi, tipik bir CNN dört ana katmanın bir kombinasyonundan oluşur: 

  • Evrişim katmanları
  • Düzeltilmiş Doğrusal Birim (kısaca ReLU)
  • Havuzlama katmanları
  • Tam bağlı katmanlar 

El yazısı rakam sınıflandırması örneğini kullanarak bu katmanların her birinin nasıl çalıştığını anlayalım.

Rakam tanımaya uygulanan CNN mimarisi

Evrişim katmanları

Bu, bir CNN’in ilk yapı taşıdır. Adından da anlaşılacağı gibi, gerçekleştirilen ana matematiksel işlem, bir görüntüyü temsil eden piksel matrisine kayan pencere fonksiyonunun uygulanması olan evrişimdir. Matrise uygulanan kayan fonksiyon, çekirdek veya filtre olarak adlandırılır ve bu iki terim birbirinin yerine kullanılabilir. 

Evrişim katmanında, eşit boyutta birkaç filtre uygulanır ve her filtre, rakamların kavisleri, kenarlar, rakamların genel şekli ve daha fazlası gibi görüntüden belirli bir deseni tanımak için kullanılır. 

Bu el yazısı rakamın 32x32 gri tonlamalı görüntüsünü ele alalım. Matristaki değerler, örnekleme amacıyla verilmiştir.

Girdi görüntüsünün ve piksel gösteriminin görselleştirilmesi

Ayrıca, evrişim için kullanılan çekirdeği ele alalım. 3x3 boyutlarında bir matristir. Çekirdeğin her bir elemanının ağırlıkları ızgarada gösterilmiştir. Sıfır ağırlıklar siyah ızgaralarda, birler beyaz ızgarada gösterilir. 

Bu ağırlıkları elle bulmak zorunda mıyız? 

Gerçek hayatta, çekirdeklerin ağırlıkları, sinir ağının eğitim süreci sırasında belirlenir. 

Bu iki matrisi kullanarak, noktasal çarpımı uygulayarak evrişim işlemini gerçekleştirebilir ve şu şekilde ilerleyebiliriz: 

  1. Çekirdek matrisini sol üst köşeden sağa doğru uygulayın.
  2. Eleman düzeyinde çarpma yapın.  
  3. Çarpımların değerlerini toplayın.
  4. Ortaya çıkan değer, evrişimli matrisin ilk değerine (sol üst köşe) karşılık gelir.
  5. Kayan pencerenin boyutuna göre çekirdeği aşağı doğru hareket ettirin.
  6. Görüntü matrisi tamamen kapsanana kadar 1’den 5’e kadar olan adımları tekrarlayın.

Evrişimli matrisin boyutu, kayan pencerenin boyutuna bağlıdır. Kayan pencere büyüdükçe boyut küçülür.

3x3 çekirdekle adım 1 kullanılarak evrişim işleminin uygulanması

Literatürde çekirdekle ilişkilendirilen bir diğer ad ise öznitelik belirleyicidir; çünkü ağırlıklar, girdi görüntüsündeki belirli öznitelikleri tespit edecek şekilde ince ayar yapılabilir. 

Örneğin: 

  • Komşu pikselleri ortalayan çekirdek, girdi görüntüsünü bulanıklaştırmak için kullanılabilir.
  • Komşuluk farkını alan çekirdek, kenar tespiti yapmak için kullanılır.

Ağda ne kadar çok evrişim katmanı varsa, katman o kadar soyut öznitelikleri tespit etmede daha iyi olur. 

Etkinleştirme fonksiyonu

Her evrişim işleminden sonra bir ReLU etkinleştirme fonksiyonu uygulanır. Bu fonksiyon, ağın görüntüdeki öznitelikler arasındaki doğrusal olmayan ilişkileri öğrenmesine yardımcı olarak farklı kalıpları tanımlamada ağı daha sağlam hâle getirir. Ayrıca sönümlenen gradyan problemlerini hafifletmeye yardımcı olur. 

Havuzlama katmanı

Havuzlama katmanının amacı, evrişimli matristen en anlamlı öznitelikleri çekmektir. Bu, bazı toplulaştırma işlemlerini uygulayarak gerçekleştirilir; böylece öznitelik haritasının (evrişimli matris) boyutu azaltılır ve ağ eğitilirken kullanılan bellek düşer.  Havuzlama ayrıca aşırı uyumu hafifletmek için de önemlidir.

Uygulanabilecek en yaygın toplulaştırma fonksiyonları şunlardır: 

  • Maksimum havuzlama: öznitelik haritasındaki en büyük değer
  • Toplam havuzlama: öznitelik haritasındaki tüm değerlerin toplamı
  • Ortalama havuzlama: tüm değerlerin ortalaması. 

Aşağıda, önceki örneklerin her birine ilişkin bir görselleştirme yer almaktadır: 

2x2 filtre ve adım 2 ile maksimum havuzlamanın uygulanması

Ayrıca, havuzlama işlevi uygulandıkça öznitelik haritasının boyutu küçülür. 

Son havuzlama katmanı, öznitelik haritasını, tam bağlı katman tarafından işlenebilmesi için düzleştirir. 

Tam bağlı katmanlar

Bu katmanlar, evrişimli sinir ağının son kısmındadır ve girdileri, son havuzlama katmanı tarafından üretilen düzleştirilmiş tek boyutlu matrise karşılık gelir. Doğrusal olmama için bunlara ReLU etkinleştirme fonksiyonları uygulanır. 

Son olarak, her bir olası çıktı etiketi için olasılık değerleri üretmek üzere bir softmax tahmin katmanı kullanılır ve en yüksek olasılık puanına sahip etiket nihai tahmin olur. 

Dropout 

Dropout, çok sayıda parametreye sahip sinir ağlarının genelleme yeteneğini artırmak için uygulanan bir düzenlileştirme tekniğidir. Eğitim sürecinde rastgele bazı nöronların düşürülmesinden oluşur; bu da kalan nöronları, girdi verilerinden yeni öznitelikler öğrenmeye zorlar.  

Teknik uygulama TensorFlow 2 kullanılarak gerçekleştirileceğinden, bir sonraki bölüm bu çerçevenin farklı bileşenlerine derin öğrenme modellerini verimli şekilde kurmak için kapsamlı bir genel bakış sağlamayı amaçlar. 

TensorFlow Çerçevesi nedir?

Google, TensorFlow’u Kasım 2015’te geliştirdi. Bunu, birkaç nedenle herkes için açık kaynaklı bir makine öğrenimi çerçevesi olarak tanımlarlar. 

TensorFlow’un tanımı

  • Açık kaynak: Apache 2.0 açık kaynak lisansı altında yayımlanmıştır. Bu, araştırmacıların, kuruluşların ve geliştiricilerin kütüphaneye herhangi bir kısıtlama olmaksızın katkıda bulunmasını ve onun üzerine inşa etmesini sağlar. 
  • Makine öğrenimi çerçevesi: makine öğrenimi modellerinin kurulum sürecini destekleyen bir dizi kütüphane ve araca sahip olduğu anlamına gelir.
  • Herkes için: TensorFlow kullanmak, Python gibi yaygın programlama dilleri aracılığıyla makine öğrenimi modellerinin uygulanmasını kolaylaştırır. Ayrıca Keras gibi yerleşik kütüphaneler, sağlam derin öğrenme modelleri oluşturmayı daha da kolaylaştırır. 

Tüm bu işlevler, TensorFlow’u sinir ağları kurmak için iyi bir aday yapar. 

Ayrıca TensorFlow 2’nin kurulumu basittir ve pip adlı Python paket yöneticisi kullanılarak resmî belgelerde açıklandığı şekilde gerçekleştirilebilir. 

Kurulumdan sonra, kullanılan sürümün 2.9.1 olduğunu görebiliriz

import tensorflow as tf
print("TensorFlow version:", tf.__version__)

Şimdi, bu ağları oluşturmanın temel bileşenlerini daha fazla keşfedelim. 

Tensor nedir?

Makine öğrenimi ve derin öğrenme modelleri kurarken çoğunlukla yüksek boyutlu verilerle uğraşırız. Tensorler, verinin farklı özniteliklerini temsil etmek için kullanılan, tek tip türe sahip çok boyutlu dizilerdir. 

Aşağıda tensorlerin farklı boyut türlerinin görsel gösterimi yer almaktadır. 

0’dan 3 boyutlu tensörlere görselleştirme

  • 0 boyutlu bir tensor tek bir değer içerir.
  • 1 boyutlu tensor, “rank-1” tensor olarak da bilinir ve bir değerler listesidir. 
  • 2 boyutlu tensor, “rank-2” tensördür.
  • Son olarak, N boyutlu bir tensorümüz olabilir; burada N, tensor içindeki boyut sayısını temsil eder. Önceki durumlarda N sırasıyla 0, 1 ve 2’dir.

Aşağıda sıfırdan 3 boyutlu tensöre bir görselleştirme yer almaktadır. Her bir tensör, TensorFlow’daki constant() işlevi kullanılarak oluşturulur. 

# Sıfır boyutlu tensör
zero_dim_tensor = tf.constant(20)
print(zero_dim_tensor)

# Bir boyutlu tensör
one_dim_tensor = tf.constant([12, 20, 53, 26, 11, 56])
print(one_dim_tensor)

# İki boyutlu tensör
two_dim_array = [[3, 6, 7, 5],
             	[9, 2, 3, 4],
             	[7, 1, 10,6],
             	[0, 8, 11,2]]

two_dim_tensor = tf.constant(two_dim_array)
print(two_dim_tensor)

Önceki kodun başarıyla yürütülmesi aşağıdaki çıktıları üretmelidir ve sonucun bir tensör olduğunu belirtmek için “tf.Tensor” anahtar sözcüğünü görebiliriz. Üç parametreye sahiptir:

  •  Tensörün gerçek değeri.
  • Tensörün shape()’i; ilk, ikinci ve üçüncü tensörler için sırasıyla 0, 6’ya 1 ve 4’e 4’tür.
  • Tüm tensörlerin int32 olduğu dtype özelliğiyle temsil edilen veri türü.

TensorFlow’da tensör örnekleri

Yeni başlayanlar için TensorFlow Eğitimimiz, TensorFlow’a kapsamlı bir genel bakış sunar ve modellerin nasıl kurulup eğitileceğini öğretir.

Tensörler ve Matrisler: Farklar

Pek çok kişi tensörleri matrislerle karıştırır. Bu iki nesne benzer görünse de tamamen farklı özelliklere sahiptir. Bu bölüm, matrisler ve tensörler arasındaki farkı daha iyi anlamayı sağlar.

  • Bir matrisi, yalnızca iki boyuta sahip bir tensör olarak düşünebiliriz. 
  • Öte yandan tensörler, herhangi bir sayıda boyuta sahip olabilen daha genel bir formattır.

Matrislerin aksine, tensörler aşağıdaki nedenlerle derin öğrenme problemleri için daha uygundur: 

  • Herhangi bir sayıda boyutla başa çıkabilirler; bu da onları çok boyutlu veriler için daha uygun kılar.
  • Tensörlerin çok çeşitli veri türleri, şekiller ve boyutlarla uyumlu olma yeteneği, onları matrislerden daha esnek kılar.
  • TensorFlow, hesaplamaları hızlandırmak için GPU ve TPU desteği sağlar. Tensörler kullanıldığında makine öğrenimi mühendisleri bu avantajlardan otomatik olarak yararlanabilir.
  • Tensörler, farklı şekillerdeki tensörler arasında aritmetik işlemler yapmayı ifade eden yayınlamayı (broadcasting) yerel olarak destekler; bu, matrislerle çalışırken her zaman mümkün değildir.  

TensorFlow: Sabitler, Değişkenler ve Yer Tutucular

Sabitler, tek tür tensör değildir. Değişkenler ve yer tutucular da vardır ve bunların tümü hesaplama grafiğinin yapı taşlarıdır. 

Bir hesaplama grafiği, temel olarak bir dizi işlemin ve aralarındaki veri akışının bir temsilidir. 

Şimdi, bu tensör türleri arasındaki farkı anlayalım.

Sabitler

Sabitler, hesaplama grafiğinin yürütülmesi sırasında değerleri değişmeyen tensörlerdir. tf.constant() işlevi kullanılarak oluşturulurlar ve ağırlıklı olarak, model eğitimi sırasında değişiklik gerektirmeyen sabit parametreleri saklamak için kullanılırlar.

Değişkenler

Değişkenler, hesaplama grafiğinin yürütülmesi sırasında değeri değişebilen tensörlerdir ve tf.Variable() işlevi kullanılarak oluşturulurlar. Örneğin sinir ağlarında, eğitim sürecinde güncellenmeleri gerektiği için ağırlıklar ve biaslar değişken olarak tanımlanabilir. 

Yer tutucular

Bunlar, belirli değerlere sahip olmayan boş kaplar olarak TensorFlow’un ilk sürümünde kullanılıyordu. Gelecekte kullanılacak veriler için yer ayırmaktan ibarettir. Bu, kullanıcılara model eğitimi ve doğrulaması sırasında farklı veri kümeleri ve yığın (batch) boyutlarını kullanma özgürlüğü sağlar.

TensorFlow sürüm 2’de yer tutucular, veriyi hesaplama grafiğine beslemek için daha Pythonik ve dinamik bir yaklaşım olan tf.function() işleviyle değiştirilmiştir. 

CNN’in Adım Adım Uygulanması

Önceden öğrendiklerimizin hepsini pratiğe dökelim. Bu bölüm, CIFAR-10 veri kümesine uygulanan bir evrişimli sinir ağının TensorFlow’da uçtan uca uygulamasını gösterecektir; bu, aşağıdaki özelliklere sahip yerleşik bir veri kümesidir: 

  • 60.000 adet 32’ye 32 renkli görüntü içerir
  • Veri kümesi 10 farklı sınıfa sahiptir
  • Her sınıfta 6000 görüntü vardır
  • Toplamda 50.000 eğitim görüntüsü vardır 
  • Ve toplamda 10.000 test görüntüsü vardır

Makalenin kaynak kodu DataCamp’in çalışma alanında mevcuttur

Ağın mimarisi

Teknik uygulamaya geçmeden önce, uygulanmakta olan ağın genel mimarisini anlayalım. 

Uygulanacak modelin mimarisi

  • Modelin girdisi, sırasıyla genişlik, yükseklik ve kanallar için 32x32x3 bir tensördür. 
  • İki evrişim katmanımız olacak. İlk katman, her biri 3x3 boyutunda 32 filtre ve bir ReLU etkinleştirme fonksiyonu uygular. İkincisi ise 3x3 boyutunda 64 filtre uygular
  • İlk havuzlama katmanı, 2x2 maksimum havuzlama uygular
  • İkinci havuzlama katmanı da 2x2 maksimum havuzlama uygular
  • Tam bağlı katman 128 birime ve bir ReLU etkinleştirme fonksiyonuna sahip olacaktır
  • Son olarak çıktı, 10 sınıfa karşılık gelen 10 birimden oluşur ve olasılık dağılımları üretmek için etkinleştirme işlevi softmax’tır.

Veri kümesini yükleyin

Yerleşik veri kümesi keras.datasets()’ten şu şekilde yüklenir: 

(train_images, train_labels), (test_images, test_labels) = cf10.load_data()

Keşifsel Veri Analizi

Bu bölümde, hem eğitim hem de test verilerindeki her sınıfın oranını zaten bildiğimiz için yalnızca bazı örnek görüntüleri göstermeye odaklanacağız. 

show_images() yardımcı işlevi varsayılan olarak toplam 12 görüntü gösterir ve üç ana parametre alır: 

  • Eğitim görüntüleri
  • Sınıf adları
  • Ve eğitim etiketleri.
import matplotlib.pyplot as plt

def show_images(train_images,
            	class_names,
            	train_labels,
            	nb_samples = 12, nb_row = 4):
    
	plt.figure(figsize=(12, 12))
	for i in range(nb_samples):
    	plt.subplot(nb_row, nb_row, i + 1)
    	plt.xticks([])
    	plt.yticks([])
    	plt.grid(False)
    	plt.imshow(train_images[i], cmap=plt.cm.binary)
    	plt.xlabel(class_names[train_labels[i][0]])
	plt.show()

Şimdi, gerekli parametrelerle işlevi çağırabiliriz. 

class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
           	'dog', 'frog', 'horse', 'ship', 'truck']

show_images(train_images, class_names, train_labels)

Önceki kodun başarıyla yürütülmesi aşağıdaki görüntüleri üretir. 

Eğitim verilerinden örnek görüntüler

Veri ön işleme

Modeli eğitmeden önce, verideki piksel değerlerini aynı aralığa (ör. 0 ile 1) normalize etmemiz gerekir. Bu, görüntülerle çalışırken ölçek değişmezliğini sağlamak ve eğitim sırasında daha hızlı yakınsama elde etmek için yaygın bir ön işleme adımıdır. 

max_pixel_value = 255

train_images = train_images / max_pixel_value
test_images = test_images / max_pixel_value

Ayrıca etiketlerin kedi, at, kuş gibi kategorik formatta temsil edildiğini görüyoruz. Sinir ağı tarafından kolayca işlenebilmeleri için bunları sayısal formata dönüştürmemiz gerekir.

from tensorflow.keras.utils import to_categorical
train_labels = to_categorical(train_labels, len(class_names))
test_labels = to_categorical(test_labels, len(class_names))

Model mimarisi uygulaması

Bir sonraki adım, önceki açıklamaya dayalı olarak ağın mimarisini uygulamaktır. 

İlk olarak modeli Sequential() sınıfını kullanarak tanımlarız ve her katmanı add() işleviyle modele ekleriz. 

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# Değişkenler
INPUT_SHAPE = (32, 32, 3)
FILTER1_SIZE = 32
FILTER2_SIZE = 64
FILTER_SHAPE = (3, 3)
POOL_SHAPE = (2, 2)
FULLY_CONNECT_NUM = 128
NUM_CLASSES = len(class_names)

# Model mimarisi uygulaması
model = Sequential()
model.add(Conv2D(FILTER1_SIZE, FILTER_SHAPE, activation='relu', input_shape=INPUT_SHAPE))
model.add(MaxPooling2D(POOL_SHAPE))
model.add(Conv2D(FILTER2_SIZE, FILTER_SHAPE, activation='relu'))
model.add(MaxPooling2D(POOL_SHAPE))
model.add(Flatten())
model.add(Dense(FULLY_CONNECT_NUM, activation='relu'))
model.add(Dense(NUM_CLASSES, activation='softmax'))

Modelde summary() işlevini uyguladıktan sonra, her katman, türü, çıktı şekli ve eğitilebilir toplam parametre sayısı hakkında bilgilerle model mimarisinin kapsamlı bir özetini elde ederiz. 

Model mimarisi özeti

Model eğitimi

Sonunda modeli yapılandırmak ve eğitimi başlatmak için tüm kaynaklar hazır. Bu, sırasıyla compile() ve fit() işlevleriyle yapılır; bu işlevler aşağıdaki parametreleri alır: 

  • Optimize edici (optimizer), modelin ağırlıklarını ve biaslarını güncellemekten sorumludur. Bizim durumumuzda Adam optimize edicisini kullanıyoruz. 
  • Kayıp (loss) fonksiyonu, yanlış sınıflandırma hatalarını ölçmek için kullanılır ve biz Categorical Crossentropy’yi kullanıyoruz.
  • Son olarak, metrikler modelin performansını ölçmek için kullanılır; bizim kullanımımızda doğruluk (accuracy), kesinlik (precision) ve duyarlılık (recall) gösterilecektir.
from tensorflow.keras.metrics import Precision, Recall

BATCH_SIZE = 32
EPOCHS = 30

METRICS = metrics=['accuracy',
               	Precision(name='precision'),
               	Recall(name='recall')]

model.compile(optimizer='adam',
          	loss='categorical_crossentropy',
          	metrics = METRICS)

# Modeli eğit
training_history = model.fit(train_images, train_labels,
                	epochs=EPOCHS, batch_size=BATCH_SIZE,
                	validation_data=(test_images, test_labels))

Model değerlendirme

Model eğitildikten sonra, show_performance_curve() yardımcı işlevini kullanarak yukarıdaki metrikleri iki boyutta çizerek, modelin performansını hem eğitim hem de test veri kümelerinde karşılaştırabiliriz. 

  • Yatay eksen (x) epoch sayısıdır
  • Dikey eksen (y) modelin ilgili performansıdır. 
  • Eğri, belirli bir epoch’taki metrik değerini temsil eder.

Daha iyi görselleştirme için, eğitim ve doğrulama performans değerlerinin kesişimi ile optimum değer üzerinden dikey kırmızı bir çizgi çizilir.

def show_performance_curve(training_result, metric, metric_label):
    
	train_perf = training_result.history[str(metric)]
	validation_perf = training_result.history['val_'+str(metric)]
	intersection_idx = np.argwhere(np.isclose(train_perf,
                                            	validation_perf, atol=1e-2)).flatten()[0]
	intersection_value = train_perf[intersection_idx]
    
	plt.plot(train_perf, label=metric_label)
	plt.plot(validation_perf, label = 'val_'+str(metric))
	plt.axvline(x=intersection_idx, color='r', linestyle='--', label='Intersection')
    
	plt.annotate(f'Optimal Value: {intersection_value:.4f}',
         	xy=(intersection_idx, intersection_value),
         	xycoords='data',
         	fontsize=10,
         	color='green')
            	 
	plt.xlabel('Epoch')
	plt.ylabel(metric_label)
	plt.legend(loc='lower right')

Daha sonra işlev, modelin hem doğruluğu hem de kesinliği için uygulanır.

show_performance_curve(training_history, 'accuracy', 'accuracy')

Modelin eğitim ve doğrulama verilerindeki doğruluğu

show_performance_curve(training_history, 'precision', 'precision')

Modelin eğitim ve doğrulama verilerindeki kesinliği

Herhangi bir ince ayar ve ön işleme yapmadan modeli eğittikten sonra şu sonuçlara ulaştık:  

  • %67,09 doğruluk; yani model, her 100 örneğin 67’sini doğru sınıflandırıyor. 
  • Ve %76,55 kesinlik; yani her 100 pozitif tahminin yaklaşık 77’si gerçek pozitif, kalan 23’ü ise yanlış pozitif.
  • Bu skorlar, doğruluk ve kesinlik için sırasıyla üçüncü ve ikinci epoch’ta elde edilmiştir.

Bu iki metrik, modelin davranışına dair genel bir anlayış sağlar. 

Peki, her bir sınıf için modelin hangilerini iyi tahmin ettiğini, hangilerinde zorlandığını bilmek istersek?

Bu, her sınıf için doğru ve yanlış tahminlerin sayısını gösteren karışıklık matrisiyle elde edilebilir. Uygulama aşağıda verilmiştir. Önce test verileri üzerinde tahminler yapar, ardından karışıklık matrisini hesaplar ve nihai sonucu gösteririz.

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

test_predictions = model.predict(test_images)

test_predicted_labels = np.argmax(test_predictions, axis=1)

test_true_labels = np.argmax(test_labels, axis=1)

cm = confusion_matrix(test_true_labels, test_predicted_labels)

cmd = ConfusionMatrixDisplay(confusion_matrix=cm)

cmd.plot(include_values=True, cmap='viridis', ax=None, xticks_rotation='horizontal')
plt.show()

Modelin karışıklık matrisi

  • Sırasıyla airplane, automobile, frog, horse, ship ve truck için 0, 1, 6, 7, 8, 9 sınıfları, diyagonal üzerinde en yüksek değerlere sahiptir. Bu, modelin bu sınıfları daha iyi tahmin ettiği anlamına gelir. 
  • Öte yandan, kalan sınıflarda zorlanıyor gibi görünmektedir:  
  • Diyagonal dışı en yüksek değerlere sahip sınıflar, modelin iyi sınıfları karıştırdığı sınıflardır. Örneğin kuşları (sınıf 2) uçak ile ve automobile’ı truck (sınıf 9) ile karıştırıyor.

Karışıklık matrisi hakkında daha fazla bilgiyi, R’da karışıklık matrisini anlama eğitimimizden edinebilirsiniz; bu eğitim, DataCamp’in Makine Öğrenimi araç kutusu kursundan ders materyali içerir.

Bu model, aşağıdaki ek görevlerle iyileştirilebilir:  

  • Görüntü artırma (augmentation)
  • ResNet, MobileNet veya VGG gibi önceden eğitilmiş modelleri kullanarak transfer öğrenme. Transfer öğrenme eğitimimiz, transfer öğrenmenin ne olduğunu ve gerçek hayattaki bazı uygulamalarını açıklar.
  • L1, L2 veya dropout gibi farklı düzenlileştirme tekniklerini uygulamak.  
  • Öğrenme oranı, yığın boyutu ve ağdaki katman sayısı gibi farklı hiperparametrelere ince ayar yapmak. 

Sonuç

Bu makale, TensorFlow’da CNN’lere kapsamlı bir genel bakış sundu ve CNN mimarisinin her bir katmanına ilişkin ayrıntılar verdi. Ayrıca TensorFlow’a kısa bir giriş yaparak, makine öğrenimi mühendisleri ve araştırmacıların gelişmiş sinir ağları kurmasına nasıl yardımcı olduğunu anlattı. 

Tüm bu beceri setlerini çok sınıflı bir sınıflandırma göreviyle ilgili gerçek dünya senaryosuna uyguladık.  

Bilgisayarla görme hakkında öğreniminizi derinleştirmek için yeni başlayanlar için nesne tespiti rehberimiz harika bir sonraki adım olabilir. Nesne tespitinin temel bileşenlerini inceler ve TensorFlow’da bulunan SSD ve Faster RCNN’de nasıl uygulanacağını açıklar.

Konular
Python
Makine Öğrenimi
Derin Öğrenme

Python Kursları

Kurs

Python’a Giriş

4 sa
7.1M
Python ile veri analizi temellerini sadece dört saatte öğrenin. Bu çevrimiçi kurs, Python arayüzünü tanıtacak ve popüler paketleri keşfedecektir.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör