• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

PyTorch'ta batch normalization katmanı nasıl kullanılır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
PyTorch'ta batch normalization katmanı kullanmak için ağın uygun yerine nn.BatchNorm1d, nn.BatchNorm2d veya nn.BatchNorm3d ekleyin; ardından modeli eğitim ve değerlendirme modlarında doğru çalıştırın. En yaygın görüntü sınıflandırma senaryosunda katman, evrişim katmanından sonra ve etkinleştirme işlevinden önce kullanılır. Böylece eğitim sırasında mini yığın istatistikleriyle normalizasyon yapılır, değerlendirme sırasında ise öğrenilen hareketli ortalama ve varyans kullanılır.

Doğru BatchNorm katmanını seçme​


Katmanın türü, giriş tensörünün boyutuna göre belirlenir. BatchNorm2d görüntü verilerinde kullanılan (N, C, H, W) biçimindeki tensörler içindir. Burada C, kanal sayısıdır ve katmana verilecek num_features değeriyle aynı olmalıdır. Vektör veya özellik tablosu biçimindeki (N, F) verilerde BatchNorm1d, üç boyutlu hacim verilerinde ise BatchNorm3d kullanılır.

Önemli bilgi: num_features toplam eleman sayısı değil, normalizasyon yapılacak kanal veya özellik sayısıdır. Örneğin Conv2d(3, 32, ...) katmanının çıktısı 32 kanallıysa hemen sonrasında BatchNorm2d(32) kullanılmalıdır.

Evrişimli ağda kullanım​


Aşağıdaki örnek, üç kanallı bir görüntüyü 16 kanallı özellik haritasına dönüştürür ve normalizasyonu uygular. Kod, tek bir evrişim bloğunun en küçük çalışır örneğidir.

Python:
import torch
from torch import nn

class ConvBlock(nn.Module):
    def __init__(self):
        super().__init__()
        self.block = nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1),
            nn.BatchNorm2d(16),
            nn.ReLU()
        )

    def forward(self, x):
        return self.block(x)

model = ConvBlock()
x = torch.randn(8, 3, 32, 32)  # 8 görüntü, 3 kanal, 32x32 piksel
output = model(x)
print(output.shape)  # torch.Size([8, 16, 32, 32])

Burada BatchNorm2d(16), eğitim sırasında her kanal için mini yığındaki (N, H, W) eksenleri boyunca hesaplanan ortak ortalama ve varyansı kullanır; her örneği tek başına normalize etmez. Çıktının şekli değişmez; yalnızca kanal değerlerinin dağılımı dönüştürülür. Batch normalization yeni bilgi üretmez, eksik veriyi tamamlamaz ve tek başına modelin doğruluğunu garanti etmez.

Katmanı modele ekleme sırası​


Gerçek bir model sınıfına katman eklerken şu sırayı izleyin:
  1. Çıkış kanalını belirleyin. Batch normalization katmanının kanal sayısını, kendisinden önceki evrişim veya doğrusal katmanın çıkış boyutuyla aynı yapın; örneğin 64 çıkış kanalı için BatchNorm2d(64) kullanın.
  2. Normalizasyon katmanını bloğa yerleştirin. Yaygın kullanım sırası Conv2d → BatchNorm2d → ReLU biçimindedir. Bu sıra tek zorunlu düzen değildir, ancak katmanın hangi tensör üzerinde çalıştığını açıkça gösterir.
  3. Girdi biçimini kontrol edin. Görüntü tensörünün (batch, channel, height, width) düzeninde olduğunu doğrulayın. Kanal sayısı katmanın num_features değeriyle eşleşmezse boyut uyuşmazlığı hatası alırsınız.
  4. Çıktı şeklini kontrol edin. Örnekte olduğu gibi print(output.shape) ile kanal sayısının beklenen değere dönüştüğünü ve yükseklik ile genişliğin korunup korunmadığını inceleyin.

Eğitim ve değerlendirme modları​


Batch normalization eğitim sırasında mevcut mini yığının ortalama ve varyansını kullanır; aynı zamanda hareketli istatistikler tutar. Değerlendirme aşamasında model.eval() çağrısı yapılır ve katman, eğitim sırasında biriktirilen hareketli istatistiklerle çalışır. Bu nedenle değerlendirmeden önce yalnızca torch.no_grad() kullanmak yeterli değildir; modelin değerlendirme moduna da geçirilmesi gerekir.
  1. Eğitimden önce eğitim modunu açın. model.train() çağrısı BatchNorm katmanının mini yığın istatistiklerini kullanmasını sağlar.
  2. Eğitim döngüsünü çalıştırın. Kayıp hesabı, geri yayılım ve optimizer güncellemesi normal biçimde yapılır; BatchNorm'un öğrenilebilir ölçek ve kaydırma parametreleri de güncellenir.
  3. Doğrulama veya test öncesi değerlendirme moduna geçin. model.eval() çağrısından sonra with torch.no_grad(): bloğu içinde tahmin yapın.
  4. Mod değişimini doğrulayın. Aynı girdiyi test amacıyla iki modda çalıştırırken sonuçların farklı olabileceğini kabul edin; bu fark, özellikle küçük yığınlarda hareketli istatistiklerin henüz kararlı olmamasına işaret edebilir.

BatchNorm, LayerNorm ve GroupNorm seçimi​


Batch normalization mini yığın istatistiklerine bağlı olduğu için yığın boyutu çok küçük olduğunda veya eğitim ile çıkarım dağılımları belirgin biçimde değiştiğinde daha az kararlı olabilir. Alternatif normalizasyonlar aynı problemi farklı eksenlerde ele alır. Seçimi aşağıdaki ölçütlerle yapabilirsiniz.

Hangi durumda hangi katman?​



Katman seçimi, verinin biçiminden çok eğitim koşullarına da bağlıdır. Özellikle görüntü modellerinde normal yığın boyutu kullanılabiliyorsa BatchNorm2d iyi bir başlangıçtır; ancak yığın boyutu 1'e düşüyorsa alternatifleri değerlendirmek gerekir.
Katmanİstatistik dayanağıUygun kullanım
BatchNormMini yığın ve kanal istatistikleriYeterli yığın boyutuna sahip CNN modelleri
LayerNormHer örneğin kendi özellikleriDizi, dönüştürücü ve değişken yığın koşulları
GroupNormKanal gruplarıKüçük yığınlı görüntü modelleri
Tablodaki ayrım, katmanların birbirinin doğrudan yerine her durumda sorunsuz geçeceği anlamına gelmez. Birini değiştirirken tensör boyutlarını, öğrenme oranını ve modelin eğitim davranışını yeniden kontrol etmelisiniz. BatchNorm kullanırken temel doğrulama, eğitim ve değerlendirme modlarının doğru ayarlanması ve normalizasyon katmanının beklenen kanal sayısını almasıdır.

Yaygın hatalar ve yorumlama​

  • Kanal sayısı hatası: BatchNorm2d(32) kullanılmış ancak önceki katman 16 kanal üretmişse num_features değerini 16 olarak düzeltin.
  • Yanlış katman türü: Görüntü tensörüne BatchNorm1d eklemek yerine tensör düzenini ve kullanılan katmanın beklediği boyutları kontrol edin.
  • Testte model.train() kullanılması: Test sonuçları her çağrıda değişebilir veya eğitim yığınına bağlı kalabilir. Testten önce model.eval() çağırın.
  • Çok küçük yığın: Eğitim kaybı dalgalanıyor veya doğrulama başarımı istikrarsızsa sorun yalnızca BatchNorm olmayabilir; yığın boyutunu, veri dağılımını ve gerekirse GroupNorm veya LayerNorm seçeneğini birlikte değerlendirin.
Eğitim kaybının azalması BatchNorm'un doğru yapılandırıldığını tek başına kanıtlamaz. Katman boyutlarının girişle eşleştiğini, eğitim ve değerlendirme modlarının ayrıldığını ve doğrulama ölçümünün model.eval() sonrasında yapıldığını kontrol edin. Bu kontroller doğruysa modelin doğrulama sonuçlarını yığın boyutu ve normalizasyon seçimiyle birlikte yorumlayabilirsiniz.
 

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst