2026'da PyTorch ile Bilgisayarla Görü: CNN, Transfer Öğrenme ve Mülakat Soruları
PyTorch kullanarak bilgisayarla görü üzerine kapsamlı rehber. Evrişimli sinir ağları (CNN), transfer öğrenme tekniklerini öğrenin ve iş mülakatlarına hazırlanın.

Bilgisayarla görü, makine öğrenmesinin en hızlı gelişen alanlarından birini oluşturmaktadır. 2026 yılında PyTorch, görüntü işleme modelleri oluşturmak için lider çerçeve olmaya devam etmekte, sezgisel API'si ve sinir ağlarını eğitmek için güçlü araçlar sunmaktadır.
Bu rehbere başlamadan önce Python ve derin öğrenme kavramları hakkında temel bilgi sahibi olmak faydalı olacaktır. Kod örnekleri PyTorch 2.5 ve torchvision 0.20 ile test edilmiştir.
Evrişimli Sinir Ağlarına (CNN) Giriş
Evrişimli Sinir Ağları (Convolutional Neural Networks), modern bilgisayarla görünün temelini oluşturmaktadır. CNN mimarisi, görüntüler gibi ızgara yapısındaki verileri işlemek için özel olarak tasarlanmıştır. Temel bileşen, yerel desenleri tespit etmek için filtreler uygulayan evrişim katmanıdır.
Temel CNN yapısı üç ana katman türünden oluşmaktadır:
- Evrişim katmanları - filtreleri görüntü üzerinde kaydırarak yerel özellikleri tespit eder
- Havuzlama katmanları - en önemli bilgileri koruyarak boyutları azaltır
- Tam bağlı katmanlar - çıkarılan özellikler üzerinde son sınıflandırmayı gerçekleştirir
import torch
import torch.nn as nn
import torch.nn.functional as F
class SimpleCNN(nn.Module):
def __init__(self, num_classes=10):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)
self.bn1 = nn.BatchNorm2d(32)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
self.bn2 = nn.BatchNorm2d(64)
self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)
self.bn3 = nn.BatchNorm2d(128)
self.pool = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(128 * 4 * 4, 512)
self.fc2 = nn.Linear(512, num_classes)
self.dropout = nn.Dropout(0.5)
def forward(self, x):
x = self.pool(F.relu(self.bn1(self.conv1(x))))
x = self.pool(F.relu(self.bn2(self.conv2(x))))
x = self.pool(F.relu(self.bn3(self.conv3(x))))
x = x.view(-1, 128 * 4 * 4)
x = self.dropout(F.relu(self.fc1(x)))
x = self.fc2(x)
return xYukarıdaki kod, üç evrişim katmanı, batch normalizasyon ve havuzlama katmanları içeren basit bir CNN tanımlamaktadır. Bu mimari, 32x32 piksel boyutundaki görüntülerin sınıflandırılması için uygundur.
torchvision ile Veri Hazırlama
Verilerin doğru şekilde hazırlanması, model başarısı için kritik öneme sahiptir. torchvision kütüphanesi, popüler veri setlerini yüklemek ve veri artırma işlemleri gerçekleştirmek için araçlar sağlamaktadır.
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
# Eğitim verileri için dönüşümlerin tanımlanması
train_transform = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.RandomRotation(15),
transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])
# Test verileri için dönüşümler (artırma olmadan)
test_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])
# CIFAR-10 veri setinin yüklenmesi
train_dataset = torchvision.datasets.CIFAR10(
root='./data', train=True, download=True, transform=train_transform
)
test_dataset = torchvision.datasets.CIFAR10(
root='./data', train=False, download=True, transform=test_transform
)
train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=4)
test_loader = DataLoader(test_dataset, batch_size=128, shuffle=False, num_workers=4)Veri artırma, eğitim setinin çeşitliliğini yapay olarak artırarak aşırı öğrenmeyi (overfitting) önlemeye yardımcı olmaktadır. Her görüntü rastgele kırpılabilir, döndürülebilir veya parlaklık açısından değiştirilebilir.
Önceden Eğitilmiş Modellerle Transfer Öğrenme
Transfer öğrenme, ImageNet gibi büyük veri setleri üzerinde eğitilmiş modellerden elde edilen bilgiyi kullanmaya olanak tanımaktadır. Sınırlı miktarda eğitim verisi olduğunda bu yaklaşım özellikle değerlidir.
import torchvision.models as models
def create_transfer_model(num_classes, freeze_backbone=True):
# Önceden eğitilmiş ResNet50'nin yüklenmesi
model = models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V2)
# Backbone katmanlarının dondurulması (isteğe bağlı)
if freeze_backbone:
for param in model.parameters():
param.requires_grad = False
# Sınıflandırma katmanının değiştirilmesi
num_features = model.fc.in_features
model.fc = nn.Sequential(
nn.Linear(num_features, 512),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(512, num_classes)
)
return model
# 10 sınıf için model oluşturma
model = create_transfer_model(num_classes=10, freeze_backbone=True)Dondurulmuş backbone yaklaşımı, veri seti küçük olduğunda faydalıdır. Bu durumda yalnızca yeni sınıflandırma katmanları eğitilir, bu da süreci hızlandırır ve aşırı öğrenme riskini azaltır.
Eğitim Döngüsü ve Doğrulama
Etkili bir eğitim döngüsünün uygulanması birçok yönün dikkate alınmasını gerektirir: optimize edici, öğrenme oranı programı ve metriklerin izlenmesi.
import torch.optim as optim
from torch.optim.lr_scheduler import CosineAnnealingLR
from tqdm import tqdm
def train_model(model, train_loader, test_loader, epochs=50, device='cuda'):
model = model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)
scheduler = CosineAnnealingLR(optimizer, T_max=epochs)
best_accuracy = 0.0
for epoch in range(epochs):
# Eğitim aşaması
model.train()
running_loss = 0.0
correct = 0
total = 0
for images, labels in tqdm(train_loader, desc=f'Epoch {epoch+1}/{epochs}'):
images, labels = images.to(device), labels.to(device)
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
_, predicted = outputs.max(1)
total += labels.size(0)
correct += predicted.eq(labels).sum().item()
train_accuracy = 100. * correct / total
# Doğrulama aşaması
model.eval()
test_correct = 0
test_total = 0
with torch.no_grad():
for images, labels in test_loader:
images, labels = images.to(device), labels.to(device)
outputs = model(images)
_, predicted = outputs.max(1)
test_total += labels.size(0)
test_correct += predicted.eq(labels).sum().item()
test_accuracy = 100. * test_correct / test_total
scheduler.step()
print(f'Epoch {epoch+1}: Train Acc: {train_accuracy:.2f}%, Test Acc: {test_accuracy:.2f}%')
if test_accuracy > best_accuracy:
best_accuracy = test_accuracy
torch.save(model.state_dict(), 'best_model.pth')
return best_accuracyCosineAnnealingLR programı öğrenme oranını kademeli olarak azaltarak daha iyi yakınsama sağlamaya yardımcı olmaktadır. En iyi modelin kaydedilmesi, optimal ağırlıkların korunmasını garanti eder.
İleri Teknikler: Attention ve Feature Pyramid
Modern CNN mimarileri, uzamsal bağımlılıkları daha iyi yakalamak için sıklıkla attention mekanizmaları ve piramit yapıları kullanmaktadır.
class ChannelAttention(nn.Module):
def __init__(self, channels, reduction=16):
super(ChannelAttention, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.max_pool = nn.AdaptiveMaxPool2d(1)
self.fc = nn.Sequential(
nn.Linear(channels, channels // reduction, bias=False),
nn.ReLU(),
nn.Linear(channels // reduction, channels, bias=False)
)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
b, c, _, _ = x.size()
avg_out = self.fc(self.avg_pool(x).view(b, c))
max_out = self.fc(self.max_pool(x).view(b, c))
attention = self.sigmoid(avg_out + max_out).view(b, c, 1, 1)
return x * attention
class SpatialAttention(nn.Module):
def __init__(self, kernel_size=7):
super(SpatialAttention, self).__init__()
self.conv = nn.Conv2d(2, 1, kernel_size, padding=kernel_size//2, bias=False)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
avg_out = torch.mean(x, dim=1, keepdim=True)
max_out, _ = torch.max(x, dim=1, keepdim=True)
attention = self.sigmoid(self.conv(torch.cat([avg_out, max_out], dim=1)))
return x * attentionAttention mekanizmaları, ağın görüntünün en ilgili bölgelerine odaklanmasını sağlayarak hesaplama karmaşıklığında minimum artışla sınıflandırma doğruluğunu artırmaktadır.
Sonuçların Değerlendirilmesi ve Görselleştirilmesi
Sonuçların görselleştirilmesi, modelin davranışını anlamaya ve potansiyel sorunları belirlemeye yardımcı olmaktadır.
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import confusion_matrix, classification_report
import seaborn as sns
def evaluate_model(model, test_loader, class_names, device='cuda'):
model.eval()
all_predictions = []
all_labels = []
with torch.no_grad():
for images, labels in test_loader:
images = images.to(device)
outputs = model(images)
_, predicted = outputs.max(1)
all_predictions.extend(predicted.cpu().numpy())
all_labels.extend(labels.numpy())
# Karışıklık matrisi
cm = confusion_matrix(all_labels, all_predictions)
plt.figure(figsize=(10, 8))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
xticklabels=class_names, yticklabels=class_names)
plt.xlabel('Tahmin')
plt.ylabel('Gerçek Etiket')
plt.title('Karışıklık Matrisi')
plt.tight_layout()
plt.savefig('confusion_matrix.png', dpi=150)
# Sınıflandırma raporu
print(classification_report(all_labels, all_predictions, target_names=class_names))Data Science & ML mülakatlarında başarılı olmaya hazır mısın?
İnteraktif simülatörler, flashcards ve teknik testlerle pratik yap.
Bilgisayarla Görü Mülakat Soruları
Makine öğrenmesi pozisyonları için yapılan iş mülakatlarında bilgisayarla görü ile ilgili sorular sıklıkla karşılaşılmaktadır. Aşağıda en önemli konular ve cevapları sunulmaktadır.
Soru 1: Evrişim ile havuzlama arasındaki fark nedir?
Evrişim, özellikleri tespit etmek için öğrenilebilir filtreler uygularken, havuzlama öğrenilecek parametre olmadan değerleri toplayarak (maksimum veya ortalama) boyutluluğu azaltır. Evrişim kanal sayısını korur veya artırır, havuzlama uzamsal çözünürlüğü azaltır.
Soru 2: Batch normalizasyon neden kullanılır?
Batch normalizasyon, her katmanın aktivasyonlarını normalize ederek öğrenme sürecini stabilize eder. Faydaları şunlardır: daha hızlı yakınsama, daha yüksek öğrenme oranları kullanabilme, düzenleme (overfitting azaltma) ve ağırlık başlatmaya duyarlılığın azaltılması.
Soru 3: Transfer öğrenme nasıl çalışır?
Transfer öğrenme, büyük bir veri seti (örn. ImageNet) üzerinde önceden eğitilmiş bir modelden elde edilen bilgiyi yeni bir görev için kullanır. CNN'in alt katmanları, farklı görevler için yararlı olan evrensel özellikleri (kenarlar, dokular) tespit eder. Üst katmanlar yeni problemin özelliklerine uyarlanır.
Soru 4: Receptive field nedir?
Receptive field, belirli bir katmandaki tek bir nöronun değerini etkileyen giriş görüntüsünün alanıdır. Daha derin katmanlar daha büyük receptive field'a sahiptir, bu da daha global desenleri tespit etmelerini sağlar.
Soru 5: Dengesiz sınıflarla nasıl başa çıkılır?
Stratejiler şunları içermektedir: kayıp fonksiyonunu ağırlıklandırma (weighted cross-entropy), azınlık sınıfını oversampling, çoğunluk sınıfını undersampling, yetersiz temsil edilen sınıflar için veri artırma ve focal loss gibi teknikler.
# Ağırlıklı kayıp fonksiyonu örneği
class_weights = torch.tensor([1.0, 2.5, 1.0, 3.0, 1.5, 1.0, 2.0, 1.0, 1.5, 1.0])
criterion = nn.CrossEntropyLoss(weight=class_weights.to(device))Soru 6: Stride ve padding arasındaki farkı açıklayın
Stride, filtrenin kayma adımını belirler - daha büyük stride çıkış boyutlarını azaltır. Padding, görüntünün çevresine değerler (genellikle sıfırlar) ekler - uzamsal boyutları korumaya ve kenar piksellerini daha iyi işlemeye olanak tanır.
Soru 7: Veri artırma nedir ve neden önemlidir?
Veri artırma, dönüşümler (döndürme, kaydırma, parlaklık değişiklikleri) uygulayarak eğitim setini yapay olarak büyütme tekniğidir. Özellikle küçük veri setlerinde modelin genelleme yeteneğine yardımcı olur ve overfitting'i azaltır.
Performans Optimizasyonu ve Dağıtım
Modelin üretim dağıtımına hazırlanması hem hız hem de boyut açısından optimizasyon gerektirmektedir.
import torch.quantization
def optimize_for_inference(model, example_input):
model.eval()
# TorchScript'e dönüştürme
scripted_model = torch.jit.trace(model, example_input)
scripted_model.save('model_scripted.pt')
# Dinamik kuantizasyon
quantized_model = torch.quantization.quantize_dynamic(
model, {nn.Linear}, dtype=torch.qint8
)
return scripted_model, quantized_model
# Kullanım örneği
example = torch.randn(1, 3, 224, 224)
scripted, quantized = optimize_for_inference(model.cpu(), example)Kuantizasyon, doğrulukta minimum kayıpla model boyutunu dört kata kadar azaltabilir. TorchScript, modellerin Python yorumlayıcısı olmadan çalıştırılmasına olanak tanır.
Sonuç
2026 yılında PyTorch ile bilgisayarla görü, görüntü sınıflandırma sistemleri oluşturmak için güçlü araçlar sunmaktadır. Başarının temel unsurları CNN mimarisini anlamak, transfer öğrenmeyi etkili bir şekilde kullanmak ve eğitim verilerini uygun şekilde hazırlamaktır.
Sunulan kavramların - temel evrişimli ağlardan gelişmiş attention mekanizmalarına kadar - kavranması, hem üretim projelerinin uygulanması hem de makine öğrenmesi alanındaki iş mülakatları için sağlam bir temel oluşturmaktadır.
Farklı veri setleriyle düzenli pratik yapmak ve mimarilerle denemeler yapmak, bu konuların daha derin anlaşılmasına ve gerçek dünya uygulamalarındaki bilgisayarla görü zorluklarına hazırlanmaya yardımcı olacaktır.

Yazan:
Anthony Fillion-MailletFullstack geliştirici, SharpSkill kurucusu
10 yılı aşkın süredir fullstack geliştirici. SharpSkill’i yönetiyor ve burada yayımlanan her şeyden sorumlu.
14 Ağustos 2026 tarihinde güncellendi
Etiketler
Paylaş
İlgili makaleler

PyTorch ve TensorFlow 2026 Karsilastirmasi: Hangi Derin Ogrenme Framework'u Secilmeli?
PyTorch ve TensorFlow'un 2026 yilindaki kapsamli karsilastirmasi. torch.compile, XLA, Keras 3 coklu backend destegi, dagitim stratejileri, performans farklari ve mulakat sorulari. Kod ornekleri ve pratik rehber.

Hugging Face Transformers 2026: NLP, Fine-Tuning ve Mulakat Sorulari
Hugging Face Transformers v5 rehberi — API mimarisi, LoRA ile fine-tuning, NLP pipeline'lari ve 2026'da data science mulakatlarinda en sik sorulan sorular.

Veri Bilimciler için LangChain 2026: LLM'ler, Ajanlar ve Mülakat Soruları
Veri bilimciler için kapsamlı LangChain eğitimi. LCEL, RAG kalıpları, ReAct ajanları ve pratik Python kod örnekleriyle en sık sorulan mülakat sorularını öğrenin.