Ana içeriğe atla

PyTorch CNN Eğitimi: Python’da Evrişimli Sinir Ağları Oluşturma ve Eğitme

PyTorch ile Python’da Evrişimli Sinir Ağları (CNN’ler) nasıl kurulur ve uygulanır öğrenin.
Güncel 22 Nis 2026  · 13 dk. oku

Evrişimli Sinir Ağları (CNN’ler), görüntü tanıma, yüz algılama ve otonom araçlar gibi uygulamaları mümkün kılan modern bilgisayarlı görü alanının temel taşlarından biridir. Bu ağlar, görüntülerden desenleri ve özellikleri otomatik olarak çıkarmak üzere tasarlanmıştır; bu da onları görsel görevlerde geleneksel makine öğrenmesi tekniklerinden daha güçlü kılar.

Bu eğitimde, araştırma ve üretim uygulamaları için hem kullanıcı dostu hem de son derece verimli bir derin öğrenme çatısı olan PyTorch kullanarak bir CNN uygulayacağız.

Önkoşullar: Derin Öğrenme ve PyTorch

CNN’lerin ayrıntılarına girmeden önce, derin öğrenme alanına ve ortamımızı kurarken kullanacağımız Python kütüphanelerine aşina olmanız gerekir.

Derin öğrenme, temel model yapısının girdi, gizli katmanlar ve çıktılardan oluştuğu makine öğrenmesinin bir alt kümesidir. Böyle bir ağ bir veya birden çok gizli katmana sahip olabilir. Derin öğrenmenin arkasındaki ilk sezgi, insan beyninin nasıl öğrendiğinden ilham alan modeller oluşturmaktı: nöron adı verilen birbiriyle bağlantılı hücreler aracılığıyla. Bu nedenle derin öğrenme modellerini hâlâ “sinir” ağları olarak adlandırıyoruz. Bu katmanlı model yapıları, yapılandırılmamış veriden desenler çıkarmak için diğer gözetimli öğrenme modellerine kıyasla çok daha fazla veriye ihtiyaç duyar. Genellikle en az birkaç yüz bin veri noktasından söz ederiz.

Derin öğrenme algoritmalarını uygulamak için çeşitli çerçeveler ve paketler olsa da, biz en popüler ve iyi bakımı yapılan çerçevelerden biri olan PyTorch’a odaklanacağız. PyTorch, sadece sektördeki derin öğrenme mühendisleri tarafından değil, araştırmacılar tarafından da tercih edilir. Pek çok derin öğrenme makalesi PyTorch kullanılarak yayımlanır. NumPy ile pek çok ortak noktayı paylaşan, sezgisel ve kullanıcı dostu olacak şekilde tasarlanmıştır. 

Bu kavramlara yönelik bir ön hazırlığa ihtiyacınız varsa, bugün PyTorch ile Derin Öğrenme kursuna kaydolmayı düşünebilirsiniz. 

Evrişimli Sinir Ağı (CNN) nedir?

Genellikle CNN veya ConvNet olarak adlandırılan evrişimli sinir ağları, bilgisayarlı görü görevleri için çok uygun belirli bir derin sinir ağı türüdür. CNN’lerin icadı 1980’lere uzanır. Ancak, yalnızca grafik işlem birimlerinin (GPU) devreye girmesiyle ortaya çıkan hesaplama atılımlarının ardından 2010’larda ana akım oldular. Gerçekten de CNN’lerin hızla yaygınlaşması, sinir ağları alanının yeniden önem kazanmasına yardımcı oldu ve bugün hâlâ içinde bulunduğumuz “sinir ağlarının üçüncü dalgası”na yol açtı.

CNN’ler özellikle biyolojik görsel korteksten esinlenmiştir. Kortekste, görsel alanın belirli bölgelerine duyarlı küçük hücre bölgeleri bulunur. Bu fikir, 1962’de Hubel ve Wiesel’in büyüleyici bir deneyi ile genişletildi. 

CNN’ler, farklı, göreve özel katmanlardan oluşan karmaşık sinir ağları oluşturarak bu özelliği kopyalamaya çalışır. CNN’ler “ileribeslemeli” olarak adlandırılır çünkü bilgi model boyunca ileri akar. Bazı diğer modellerde olduğu gibi çıktının yeniden modele beslendiği geri besleme bağlantıları yoktur; bunun yerine geriye yayılım gibi teknikler kullanılır.

Özellikle, tipik bir CNN aşağıdaki katmanlardan oluşur:

Evrişim katmanı

Bu, bir CNN’in ilk yapı taşıdır. Adından da anlaşılacağı üzere, yapılan temel matematiksel işlem evrişimdir; bu da bir görüntüyü temsil eden piksel matrisine kayan pencere fonksiyonunun uygulanmasıdır. Matriste kayan bu fonksiyon çekirdek veya filtre olarak adlandırılır. Evrişim katmanında, eşit boyutta birkaç filtre uygulanır ve her filtre, rakamların kıvrımı, kenarlar, rakamların genel şekli gibi görüntüden belirli bir deseni tanımak için kullanılır. 

Aktivasyon fonksiyonu

Genellikle, her evrişim işleminden sonra bir ReLU aktivasyon fonksiyonu uygulanır. Bu fonksiyon, ağın görüntüdeki özellikler arasındaki doğrusal olmayan ilişkileri öğrenmesine yardımcı olur; böylece farklı desenleri tanımlamada ağı daha sağlam hale getirir. Ayrıca azalan gradyan sorunlarını hafifletmeye yardımcı olur. 

Havuzlama katmanı

Havuzlama katmanının amacı, evrişim sonucu oluşan matristen en anlamlı özellikleri çekmektir. Bu, özellik haritasının (evrişimli matrisin) boyutunu azaltan ve böylece ağı eğitirken kullanılan belleği düşüren bazı toplulaştırma işlemleri uygulanarak yapılır.  Havuzlama ayrıca aşırı öğrenmeyi azaltmak için de önemlidir.

Tam bağlantı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 olmayanlığı sağlamak için bunlara ReLU aktivasyon fonksiyonları uygulanır. 

Convolution Neural Network Architecture.Evrişimli Sinir Ağı Mimarisi. Kaynak: DataCamp

CNN’lerin ardındaki matematiğin daha ayrıntılı bir açıklamasını, Python ile Evrişimli Sinir Ağları adlı eğitimimizde okuyabilirsiniz.

Görüntü sınıflandırma için neden CNN kullanılır?

Evrişimli sinir ağları, bilgisayarlı görü alanındaki en etkili yeniliklerden biri olmuştur. SVM’ler ve karar ağaçları gibi geleneksel makine öğrenmesi modellerinden çok daha iyi performans göstermiş ve alanın en iyi sonuçlarını üretmiştir. 

Ayrıca, evrişim katmanları CNN’lere konum, yönelim, ölçek veya öteleme değişimlerinden bağımsız olarak veriden desen ve özellikleri tanımlayıp çıkarmayı sağlayan çeviri değişmez özellikler kazandırır.


CNN’ler, şu gibi birçok gerçek hayat vaka çalışması ve uygulamada başarılı olduğunu kanıtlamıştır:

  • Görüntü sınıflandırma, nesne tespiti, segmentasyon, yüz tanıma;
  • CNN tabanlı görüş sistemlerinden yararlanan sürücüsüz arabalar;
  • Evrişimli sinir ağı kullanarak kristal yapı sınıflandırması;
  • Güvenlik kamera sistemleri.

Görüntü sınıflandırmanın ötesinde, CNN’ler çok yönlüdür ve doğal dil işleme, zaman serisi analizi ve konuşma tanıma gibi birçok farklı alana uygulanabilir.

PyTorch ile bir CNN uygulamak

Artık CNN teorisine aşina olduğunuza göre, işe koyulmaya hazırız. Bu bölümde PyTorch ile basit bir CNN oluşturup eğiteceğiz. Amacımız, görüntülerdeki rakamları sınıflandıracak bir model kurmak. Modelimizi eğitmek ve test etmek için, el yazısı rakamlar içeren 70.000 adet 28x28 boyutlu gri tonlamalı görüntüden oluşan ünlü MNIST veri kümesini kullanacağız.

1. Gerekli kütüphanelerin içe aktarılması

Aşağıda bu eğitimde kullanacağımız kütüphaneleri bulabilirsiniz. Özetle, CNN’imizi kurmak için PyTorch’tan ve MNIST veri kümesini indirmek ve yüklemek için PyTorch’un bilgisayarlı görü modülü torchvision’dan yararlanacağız. Son olarak, modelimizin performansını değerlendirmek için torchmetrics de kullanacağız.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


import torch
from torch import optim
from torch import nn
from torch.utils.data import DataLoader
from tqdm import tqdm

# !pip install torchvision
import torchvision

import torch.nn.functional as F
import torchvision.datasets as datasets
import torchvision.transforms as transforms

# !pip install torchmetrics
import torchmetrics

2. Veri kümesini yükleme ve ön işleme

PyTorch, bilgisayarlı görü için bir modül olan torchvision da dahil olmak üzere zengin bir araç ve eklenti ekosistemiyle gelir. Torchvision, sinir ağlarını eğitmek ve test etmek için kullanılabilecek çeşitli görüntü veri kümelerini içerir. Bu eğitimde MNIST veri kümesini kullanacağız. 

Önce MNIST veri kümesini indirecek ve PyTorch’un temel veri yapısı olan tensöre dönüştüreceğiz; bu yapı, NumPy dizilerine benzer ancak GPU hızlandırma yeteneklerine sahiptir.

Ardından, hem eğitim hem de test veri kümeleri için yığınlama ve karıştırma işlemlerini yönetmek üzere DataLoader’ı kullanacağız. Bir PyTorch DataLoader, bir Dataset’ten oluşturularak veriyi yükleyebilir, yığınlara bölebilir ve istenirse veriye dönüşümler uygulayabilir. Daha sonra eğitime hazır bir veri örneği sunar. Aşağıdaki kodda, veriyi yüklüyor ve 60 görüntülük yığın boyutuyla DataLoader’lara kaydediyoruz:

batch_size = 60

train_dataset = datasets.MNIST(root="dataset/", download=True, train=True, transform=transforms.ToTensor())

train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)

test_dataset = datasets.MNIST(root="dataset/", download=True, train=False, transform=transforms.ToTensor())

test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=True)

İsteğe bağlı olarak, eğitim veri kümesi eğitim ve doğrulama olmak üzere iki bölüme ayrılabilir. Doğrulama, eğitimi sürerken model performansını değerlendirmek için kullanılan bir tekniktir. Modellerimizin olası aşırı ve yetersiz öğrenmesini tespit etmeye yardımcı olur ve özellikle hiperparametreleri iyileştirmede faydalıdır. Ancak, basitlik adına bu eğitimde doğrulama kullanmayacağız. Doğrulama hakkında daha fazla bilgi almak isterseniz, PyTorch ile Derin Öğrenmeye Giriş kursumuzdaki kapsamlı açıklamaya göz atabilirsiniz.

Artık verilerimiz olduğuna göre, rastgele bir rakam yığını nasıl görünüyor bakalım:

def imshow(img):
   npimg = img.numpy()
   plt.imshow(np.transpose(npimg, (1, 2, 0)))
   plt.show()

# get some random training images
dataiter = iter(dataloader_train)
images, labels = next(dataiter)
labels
# show images
imshow(torchvision.utils.make_grid(images))

3. CNN mimarisini tanımlama

Sınıflandırma sorununu çözmek için, sofistike sinir ağı mimarilerini sezgisel olarak oluşturmaya yarayan PyTorch’un yapı taşı nn.Module sınıfından yararlanacağız. 

Aşağıdaki kodda, nn.Module sınıfının özelliklerini devralan CNN adlı bir sınıf oluşturuyoruz. CNN sınıfı, iki evrişim katmanı ve ardından bir tam bağlantılı katmandan oluşan bir CNN için şablon olacaktır. 

PyTorch’ta bir evrişim katmanını tanımlamak için nn.Conv2d kullanırız. Buna girdi ve çıktı özellik haritalarının sayısını veririz. Ayrıca, evrişim katmanının çalışması için çekirdek veya filtre boyutu ve doldurma (padding) dahil bazı parametreleri ayarlarız. 

Sonrasında nn.MaxPool2d ile bir maksimum havuzlama katmanı ekliyoruz. ​​Burada önceki evrişim katmanının çıktısı üzerinde örtüşmeyen bir pencere kaydırırız. Her konumda, ileri aktarılmak üzere penceredeki en büyük değeri seçeriz. Bu işlem, özellik haritalarının uzamsal boyutlarını azaltarak ağdaki parametre sayısını ve hesaplama karmaşıklığını düşürür. Son olarak bir tam bağlantılı doğrusal katman ekleriz. 

forward() fonksiyonu, katmanların nasıl bağlandığını tanımlar ve her evrişim katmanından sonra birkaç ReLU aktivasyon fonksiyonu ekler.

class CNN(nn.Module):
   def __init__(self, in_channels, num_classes):

       """
       Building blocks of convolutional neural network.

       Parameters:
           * in_channels: Number of channels in the input image (for grayscale images, 1)
           * num_classes: Number of classes to predict. In our problem, 10 (i.e digits from  0 to 9).
       """
       super(CNN, self).__init__()

       # 1st convolutional layer
       self.conv1 = nn.Conv2d(in_channels=in_channels, out_channels=8, kernel_size=3, padding=1)
       # Max pooling layer
       self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
       # 2nd convolutional layer
       self.conv2 = nn.Conv2d(in_channels=8, out_channels=16, kernel_size=3, padding=1)
       # Fully connected layer
       self.fc1 = nn.Linear(16 * 7 * 7, num_classes)

   def forward(self, x):
       """
       Define the forward pass of the neural network.

       Parameters:
           x: Input tensor.

       Returns:
           torch.Tensor
               The output tensor after passing through the network.
       """
       x = F.relu(self.conv1(x))  # Apply first convolution and ReLU activation
       x = self.pool(x)           # Apply max pooling
       x = F.relu(self.conv2(x))  # Apply second convolution and ReLU activation
       x = self.pool(x)           # Apply max pooling
       x = x.reshape(x.shape[0], -1)  # Flatten the tensor
       x = self.fc1(x)            # Apply fully connected layer
       return x
       x = x.reshape(x.shape[0], -1)  # Flatten the tensor
       x = self.fc1(x)            # Apply fully connected layer
       return x

CNN sınıfını tanımladıktan sonra modelimizi oluşturabilir ve eğitileceği ve çalıştırılacağı cihaza taşıyabiliriz. 

CNN’ler dahil sinir ağları GPU üzerinde çalıştıklarında daha iyi performans gösterir, ancak bu her bilgisayarda geçerli olmayabilir. Bu nedenle, yalnızca mevcutsa GPU üzerinde çalışacağız; aksi halde normal bir CPU kullanacağız.

device = "cuda" if torch.cuda.is_available() else "cpu"

model = CNN(in_channels=1, num_classes=10).to(device)
print(model)
>>> CNN(
  (conv1): Conv2d(1, 8, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  (conv2): Conv2d(8, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (fc1): Linear(in_features=784, out_features=10, bias=True)
)

4. CNN modelini eğitme

Artık bir modelimiz olduğuna göre, onu eğitme zamanı. Bunun için önce modelin performansını nasıl ölçeceğimize karar vermemiz gerekir. Çok sınıflı bir sınıflandırma problemiyle uğraştığımız için PyTorch’ta nn.CrossEntropyLoss olarak bulunan çapraz entropi kayıp fonksiyonunu kullanacağız. Ayrıca en popüler optimizasyon algoritmalarından biri olan Adam iyileştiricisini kullanacağız. 

# Define the loss function
criterion = nn.CrossEntropyLoss()

# Define the optimizer
optimizer = optim.Adam(model.parameters(), lr=0.001)

Modeli eğitmek için on dönem ve eğitim yığınları üzerinde yineleyecek ve her yığın için aşağıda gösterilen olağan adımlar dizisini uygulayacağız.

num_epochs=10
for epoch in range(num_epochs):
 # Iterate over training batches
   print(f"Epoch [{epoch + 1}/{num_epochs}]")

   for batch_index, (data, targets) in enumerate(tqdm(dataloader_train)):
       data = data.to(device)
       targets = targets.to(device)
       scores = model(data)
       loss = criterion(scores, targets)
       optimizer.zero_grad()
       loss.backward()
       optimizer.step()
Epoch [1/10]
100%|██████████| 1000/1000 [00:13<00:00, 72.94it/s]
Epoch [2/10]
100%|██████████| 1000/1000 [00:12<00:00, 77.27it/s]
Epoch [3/10]
100%|██████████| 1000/1000 [00:12<00:00, 77.16it/s]
Epoch [4/10]
100%|██████████| 1000/1000 [00:12<00:00, 77.00it/s]
Epoch [5/10]
100%|██████████| 1000/1000 [00:13<00:00, 75.69it/s]
Epoch [6/10]
100%|██████████| 1000/1000 [00:12<00:00, 77.24it/s]
Epoch [7/10]
100%|██████████| 1000/1000 [00:12<00:00, 78.23it/s]
Epoch [8/10]
100%|██████████| 1000/1000 [00:12<00:00, 78.16it/s]
Epoch [9/10]
100%|██████████| 1000/1000 [00:12<00:00, 77.96it/s]
Epoch [10/10]
100%|██████████| 1000/1000 [00:12<00:00, 77.93it/s]

5. Modeli değerlendirme

Model eğitildikten sonra, performansını test veri kümesi üzerinde değerlendirebiliriz. Sınıflandırma problemleri için yaygın bir metrik olan doğruluğu kullanacağız. Doğruluk, veri kümesindeki toplam nesne sayısından doğru sınıflandırılanların oranını ölçer. Modelin yaptığı doğru tahmin sayısının toplam tahmin sayısına bölünmesiyle hesaplanır. 

Önce torchmetrics’ten doğruluk metriğini kuruyoruz. Sonra, bazı PyTorch katmanları eğitim ve test aşamalarında farklı davrandığından, modeli değerlendirme kipine almak için modelin .eval metodunu kullanıyoruz. Ayrıca, gradyan hesaplaması yapmayacağımızı belirtmek için torch.no_grad ile bir Python bağlamı ekliyoruz.

Daha sonra, gradyan hesaplaması olmadan test örnekleri üzerinde yineliyoruz. Her test yığını için model çıktıları alınır, en olası sınıf seçilir ve etiketlerle birlikte doğruluk fonksiyonuna aktarılır. Son olarak metrikleri hesaplayıp sonuçları yazdırırız. 0,98 doğruluk puanı elde ettik; bu, modelimizin rakamların %98’ini doğru sınıflandırdığı anlamına gelir. Fena değil!

# Set up of multiclass accuracy metric
acc = Accuracy(task="multiclass",num_classes=10)

# Iterate over the dataset batches
model.eval()
with torch.no_grad():
   for images, labels in dataloader_test:
       # Get predicted probabilities for test data batch
       outputs = model(images)
       _, preds = torch.max(outputs, 1)
       acc(preds, labels)
       precision(preds, labels)
       recall(preds, labels)

#Compute total test accuracy
test_accuracy = acc.compute()
print(f"Test accuracy: {test_accuracy}")

>>> Test accuracy: 0.9857000112533569

Ayrıca geri çağırma (recall) ve kesinlik (precision) gibi diğer popüler sınıflandırma metriklerini de kullanabilirsiniz. Bu metrikleri pratik örneklerle PyTorch ile Orta Düzey Derin Öğrenme kursumuzda anlatıyoruz.

Model Performansını İyileştirme

CNN modelimiz güçlü bir performans sergilese de, doğruluğunu, sağlamlığını ve yeni veriye genelleme yeteneğini daha da artırmak için kullanabileceğimiz çeşitli stratejiler vardır. 

Bu bölümde, modelimizin performansını en iyi duruma getirmek için veri çoğaltma, hiperparametre ayarı ve transfer öğrenme gibi temel teknikleri inceleyeceğiz.

Veri çoğaltma teknikleri

Veri çoğaltma, rastgele yeni eğitim verileri oluşturarak modelimizin doğruluğunu artırmak için kullanılan bir tekniktir. Örneğin, yükleme sırasında eğitim görüntülerine yeniden boyutlandırma, yatay veya dikey çevirme, rastgele döndürme vb. dönüşümler uygulanabilir. Bu şekilde, çoğaltılmış görüntüler oluşturup onlara orijinal görüntüyle aynı etiketi atayarak eğitim kümesinin boyutunu artırabiliriz.

Orijinal görüntülere rastgele dönüşümler eklemek, eğitim kümesinin boyutunu ve çeşitliliğini artırırken daha fazla veri üretmemizi sağlar. Modeli, gerçek dünyadaki görüntülerde yaygın olarak görülen değişimlere ve bozulmalara karşı daha dayanıklı kılar ve model rastgele dönüşümleri göz ardı etmeyi öğrendikçe aşırı öğrenmeyi azaltır. 

Ancak, veri çoğaltmada dikkatli olmak önemlidir; zira bazen eğitim sürecine zarar verebilir. Örneğin, bizim problemimizde "6" rakamına dikey çevirme uygularsak "9" gibi görünecektir. Bunu "6" etiketiyle modele vermek modeli şaşırtacak ve eğitimi sekteye uğratacaktır. Bu örnekler, kimi zaman belirli dönüşümlerin etiket üzerinde etkisi olabileceğini gösterir.

Hiperparametre ayarı

Modelimizin performansını artırmanın bir diğer yolu da, modelin farklı katmanlarında yer alan hiperparametrelerin değerlerini değiştirmektir. Bu hiperparametre ayarı, sinir ağlarının ardındaki matematiği ve farklı hiperparametrelerin önemini derinlemesine anlamayı gerektirir. 

Örneğin, filtre boyutunu değiştirerek veya doldurmayı (padding) artırarak CNN katmanlarınızı ayarlayabilirsiniz. Ayrıca, nöronların başlangıç ağırlıkları için farklı bir değer belirleyebilirsiniz. 

Hiperparametrelerin en uygun değerlerini önceden bilmeyeceğimiz için bir miktar deneme yanılma gerekecektir. Bu genellikle, bir parametre değerleri ızgarası boyunca modeli sistematik olarak değerlendirmenize olanak tanıyan ızgara araması (grid search) tekniğiyle yapılır. 

Ancak, bu tekniği kullanırken dikkatli olun; zira özellikle karmaşık sinir ağları ve büyük eğitim veri kümeleriyle çalışırken genellikle hesaplama açısından maliyetlidir.

Aynı şekilde, daha fazla evrişim ve doğrusal katman ekleyerek modelinizin karmaşıklığını artırabilirsiniz. Ancak yeni katmanlar eklerken dikkatli olun; zira nöron sayısı dramatik biçimde artabilir, bu da daha uzun eğitim sürelerine ve olası aşırı öğrenmeye yol açabilir.

Hiperparametre ayarı hakkında daha fazla bilgiyi PyTorch ile Derin Öğrenmeye Giriş kursumuzda bulabilirsiniz.

Önceden eğitilmiş modelleri kullanma

Derin öğrenme modellerini sıfırdan eğitmek uzun ve zahmetli bir süreçtir ve genellikle çok miktarda eğitim verisi gerektirir. Bunun yerine, çoğu zaman halihazırda bir görev üzerinde eğitilmiş, yani önceden eğitilmiş modelleri kullanabiliriz. 

Bazen, ilgilendiğimiz görevi zaten çözebiliyorsa önceden eğitilmiş bir modeli doğrudan yeniden kullanabiliriz. Diğer durumlarda, önceden eğitilmiş modeli yeni göreve uyarlamamız gerekebilir. Bu, transfer öğrenme olarak bilinir.

PyTorch’ta önceden eğitilmiş modelleri kullanmak oldukça kolaydır. Torchvision, çeşitli görüntüyle ilgili görevler için bir dizi önceden eğitilmiş model sunar. Bu modeller, geniş ölçekli görüntü veri kümeleri üzerinde eğitilmiştir ve kolayca erişilebilir. Hakkında bilmeniz gereken her şeyi öğrenmek için PyTorch ile Görüntüler için Derin Öğrenme kursumuza göz atın.

CNN Modelini Dağıtma

PyTorch’ta yüksek doğruluğa sahip sınıflandırma modelinizi eğittikten sonra, modeli ve önceden eğitilmiş ağırlıklarını gelecekte kullanım için kaydedebilir ve ekibinizle paylaşarak sorunsuzca yüklenmesini sağlayabilirsiniz.

Bir modeli kaydetmek için torch.save kullanabiliriz. Torch modelleri için yaygın dosya uzantıları pt veya pth’dir. Modelin ağırlıklarını kaydetmek için, model.state_dict’i çıktı dosya adıyla birlikte torch.save’e geçiririz; örneğin MulticlassCNN.pth.

Kaydedilmiş bir modeli yüklemek için, aynı mimariye sahip yeni bir model başlatırız. Ardından, parametreleri yeni modele yüklemek için torch.load ile birlikte durum sözlüğünü yükleme yöntemini (load_state_dict) kullanırız.

# Save the model
torch.save(model.state_dict(), 'MulticlassCNN.pth')

# Create a new model
loaded_model = CNN(in_channels=1, num_classes=10)

# Load the saved model
loaded_model.load_state_dict(torch.load('MulticlassCNN.pth'))
print(loaded_model)


CNN(
  (conv1): Conv2d(1, 8, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  (conv2): Conv2d(8, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (fc1): Linear(in_features=784, out_features=10, bias=True)
)

Sonuç

CNN’lere dair kapsamlı bir genel bakış sunduk ve CNN mimarisinin her katmanına ilişkin ayrıntılar verdik. Ayrıca, veriyi yüklemeden model tasarımına, model eğitiminden değerlendirmeye kadar temel adımları kapsayarak PyTorch’ta bir CNN’in nasıl uygulanacağını gösteren bir rehber sağladık. Son olarak, modelimizin performansını iyileştirmek için çeşitli stratejileri de analiz ettik. Tüm bu becerileri çok sınıflı bir sınıflandırma göreviyle ilgili gerçek bir senaryoya uyguladık. 

Yapay zekânın en heyecan verici ve zorlu alanlarından biri olan derin öğrenme hakkında öğrenilecek çok şey var. Neyse ki, DataCamp yardımcı olmak için burada. Özel materyal ve kurslarımıza göz atın ve bir sinir ağı uzmanı olun:


Javier Canales Luna's photo
Author
Javier Canales Luna
LinkedIn

Serbest çalışan bir veri analistiyim; dünya genelinde şirketler ve kuruluşlarla veri bilimi projelerinde iş birliği yapıyorum. Ayrıca 2+ yıllık deneyime sahip bir veri bilimi eğitmeniyim. Düzenli olarak İngilizce ve İspanyolca veri bilimiyle ilgili makaleler yazıyorum; bunların bir kısmı DataCamp, Towards Data Science ve Analytics Vidhya gibi köklü internet sitelerinde yayımlandı. Siyaset bilimi ve hukuk geçmişine sahip bir veri bilimci olarak amacım, kamu politikası, hukuk ve teknolojinin kesişiminde çalışmak; fikirlerin gücünden yararlanarak özellikle iklim krizi olmak üzere acil sorunların üstesinden gelmemize yardımcı olabilecek yenilikçi çözümler ve anlatılar geliştirmek. Kendimi otodidakt bir kişi, sürekli öğrenen ve disiplinlerarasılığın güçlü bir savunucusu olarak görüyorum. Yeni şeyler öğrenmek için asla geç değildir.

Konular

En İyi DataCamp Kursları

Kurs

Python ile Deep Learning'e Giriş

4 sa
262.4K
Python'da Keras 2.0 kullanarak sinir ağlarının temellerini ve derin öğrenme modellerinin nasıl oluşturulacağını öğrenin.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow