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

PyTorch Conv2d katmanında boyutlar nasıl hesaplanır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni

Girdi ve çıktı boyutlarını ayırın​


Conv2d katmanında çıktı boyutunu hesaplamak için girdi tensörünü (N, C_in, H_in, W_in) biçiminde düşünün. N parti sayısını, C_in giriş kanalını, H_in yüksekliği ve W_in genişliği belirtir. Çıktı ise (N, C_out, H_out, W_out) biçimindedir. Parti sayısı değişmez; kanal sayısını out_channels, uzamsal boyutları ise çekirdek, doldurma, adım ve genişleme belirler.

Yükseklik ve genişlik için temel formül şöyledir:

H_out = floor((H_in + 2P_h - D_h(K_h - 1) - 1) / S_h + 1)

W_out = floor((W_in + 2P_w - D_w(K_w - 1) - 1) / S_w + 1)

Burada K çekirdek boyutu, P padding, S stride, D dilation değeridir. floor, küsurat varsa aşağı yuvarlama anlamına gelir. Tek bir sayı kullanıldığında değer genellikle hem yükseklik hem genişlik için uygulanır; ikili demet kullanıldığında sıralama (yükseklik, genişlik) şeklindedir.

Parametrelerin boyuta etkisi​


Aşağıdaki ayrım, hangi boyutun neden değiştiğini hızlıca gösterir.
ParametreÇıktıya etkisi
in_channelsGiriş kanal sayısıdır; yükseklik ve genişliği değiştirmez.
out_channelsÇıktı kanal sayısını doğrudan belirler.
kernel_sizeÇekirdeğin kapladığı alanı belirler; padding yoksa genellikle çıktıyı küçültür.
strideBirden büyükse katman görüntüyü örnekleyerek uzamsal boyutu küçültür.
paddingKenar çevresine hücre ekler; çıktı boyutunu koruyabilir veya büyütebilir.
dilationÇekirdekteki aralığı artırır; etkin çekirdek alanını büyütür.
Örneğin kernel_size=3, stride=1, padding=1 ve dilation=1 ise yükseklik formülü floor((H_in + 2 - 2 - 1) / 1 + 1) olur ve sonuç H_in çıkar. Aynı durum genişlik için de geçerlidir. Bu nedenle bu ayar, kanal sayısını değiştirse de uzamsal boyutu korur.

Somut hesaplama örneği​


Varsayımsal olarak giriş tensörünüz (8, 3, 32, 32) olsun. Bu değer 8 görüntüden, 3 giriş kanalından ve 32×32 uzamsal boyuttan oluşur. Aşağıdaki katman 16 çıkış kanalı üretir:

Python:
import torch
from torch import nn

x = torch.randn(8, 3, 32, 32)
layer = nn.Conv2d(
    in_channels=3,
    out_channels=16,
    kernel_size=3,
    stride=2,
    padding=1
)

y = layer(x)
print(y.shape)

Yükseklik hesabı:

H_out = floor((32 + 2×1 - 1×(3-1) - 1) / 2 + 1)
H_out = floor(31 / 2 + 1) = 16

Genişlik de aynı olduğundan beklenen çıktı şekli (8, 16, 16, 16) olur. İlk 8 parti sayısının korunduğunu, 16 ikinci değer çıkış kanalının out_channels=16 olduğunu, son iki 16 ise stride=2 nedeniyle uzamsal boyutun yarıya indiğini gösterir.

Hızlı kontrol için izlenecek sıra​


Gerçek bir modelde boyut hesabını şu sırayla yapın:
  1. Girdi şeklini yazın. Tensörün (N, C_in, H_in, W_in) sırasını doğrulayın; PyTorch Conv2d için kanal boyutu ikinci sıradadır.
  2. Çıkış kanalını belirleyin. Sonraki tensörün kanal boyutunu doğrudan out_channels olarak yazın.
  3. Yükseklik ve genişlik parametrelerini ayırın. Tek değer kullanılıyorsa aynı değeri iki boyuta uygulayın; demet kullanılıyorsa (yükseklik, genişlik) sırasını koruyun.
  4. Formülü iki uzamsal boyuta uygulayın. Önce H_out, sonra W_out hesaplayın ve küsuratı aşağı yuvarlayın.
  5. Sonucu çalışma zamanında doğrulayın. print(x.shape) ve print(y.shape) çıktılarında parti, kanal, yükseklik ve genişlik değerlerini hesapla karşılaştırın.

Sık karıştırılan durumlar​


PyTorch Conv2d katmanında padding='same' yalnız stride=1 ile desteklenir ve girişin uzamsal boyutlarını korur. stride>1 ile birlikte kullanılırsa katman oluşturulurken hata alınır. Ayrıca padding='valid' padding uygulanmadığı anlamına gelir ve çekirdek ile stride değerine göre çıktı küçülür.

groups parametresi kanal bağlantılarını sınırlar ve katmanın ağırlık yapısını değiştirir; tek başına H_out veya W_out hesabını değiştirmez. Ancak in_channels ve out_channels değerlerinin groups ile uyumlu olması gerekir. Boyut hatası alırsanız önce girişin ikinci boyutunu, katmanın in_channels değerini ve modeldeki önceki katmanın gerçek çıktısını karşılaştırın.
 
Son düzenleme:

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.
Geri
Üst