Garfield
YZF Admin
PyTorch'ta batch normalization katmanı kullanmak için ağın uygun yerine
Katmanın türü, giriş tensörünün boyutuna göre belirlenir.
Önemli bilgi:
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.
Burada
Gerçek bir model sınıfına katman eklerken şu sırayı izleyin:
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
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.
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.
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.
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:
- Çı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. - Normalizasyon katmanını bloğa yerleştirin. Yaygın kullanım sırası
Conv2d → BatchNorm2d → ReLUbiç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. - 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ınnum_featuresdeğeriyle eşleşmezse boyut uyuşmazlığı hatası alırsınız. - Çı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.- 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. - 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.
- Doğrulama veya test öncesi değerlendirme moduna geçin.
model.eval()çağrısından sonrawith torch.no_grad():bloğu içinde tahmin yapın. - 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 |
|---|---|---|
| BatchNorm | Mini yığın ve kanal istatistikleri | Yeterli yığın boyutuna sahip CNN modelleri |
| LayerNorm | Her örneğin kendi özellikleri | Dizi, dönüştürücü ve değişken yığın koşulları |
| GroupNorm | Kanal grupları | Küçük yığınlı görüntü modelleri |
Yaygın hatalar ve yorumlama
- Kanal sayısı hatası:
BatchNorm2d(32)kullanılmış ancak önceki katman 16 kanal üretmişsenum_featuresdeğerini 16 olarak düzeltin. - Yanlış katman türü: Görüntü tensörüne
BatchNorm1deklemek 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 öncemodel.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.
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.