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

PyTorch Sequential ile katmanlar nasıl birleştirilir?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
PyTorch’ta katmanları sırayla birleştirmek için torch.nn.Sequential kullanılır. Katmanları oluşturucuya verdikten sonra giriş tensörü ilk katmandan son katmana otomatik olarak aktarılır. Böylece basit, doğrusal bir ağın ileri yayılımını ayrıca forward() içinde tek tek yazmadan çalıştırabilirsiniz.

En küçük çalışan örnek​


Aşağıdaki varsayımsal model, 4 özellikli bir girdiyi önce 8 boyuta, ardından 2 sınıflı çıktıya dönüştürür:

Python:
import torch
from torch import nn

model = nn.Sequential(
    nn.Linear(4, 8),
    nn.ReLU(),
    nn.Linear(8, 2)
)

x = torch.randn(3, 4)  # 3 örnek, her örnekte 4 özellik
output = model(x)

print(output.shape)  # torch.Size([3, 2])

Burada x tensörünün biçimi (3, 4) olduğu için ilk Linear(4, 8) katmanı 4 giriş özelliğini kabul eder. ReLU() ara aktivasyonu uygular. Son Linear(8, 2) katmanı her örnek için 2 ham çıktı üretir. Çıktı biçiminin (3, 2) olması, üç örneğin her biri için iki değer üretildiğini gösterir; bu değerler henüz olasılık değildir.

Katmanları Sequential içine yerleştirme​


İki veya daha fazla katmanı birleştirmenin temel yolu şöyledir:
  1. Katmanları sırayla belirleyin. Bir katmanın çıktı boyutu, kendisinden sonraki katmanın giriş boyutuyla uyuşmalıdır. Örneğin Linear(4, 8) sonrasında Linear(8, 2) kullanılabilir.
  2. Katmanları nn.Sequential içine yazın. PyTorch bu katmanları eklenme sırasına göre kaydeder ve giriş tensörünü aynı sırayla iletir.
  3. Modeli tensör üzerinde çağırın. output = model(x) ifadesi katmanların ileri geçişini çalıştırır; modeli doğrudan model.forward(x) şeklinde çağırmak yerine bu kullanım tercih edilir.
  4. Çıktı biçimini kontrol edin. output.shape değerini beklediğiniz boyutla karşılaştırın. Boyut uyuşmazlığı varsa genellikle bir Linear katmanının giriş veya çıkış sayısı yanlış tanımlanmıştır.
Katmanları daha sonra adlarıyla almak veya yazdırmak isterseniz OrderedDict kullanabilirsiniz:

Python:
from collections import OrderedDict
from torch import nn

model = nn.Sequential(OrderedDict([
    ("giris", nn.Linear(4, 8)),
    ("aktivasyon", nn.ReLU()),
    ("cikis", nn.Linear(8, 2))
]))

print(model)
print(model.giris)

İsim vermek hesaplamanın sırasını değiştirmez; yalnızca katmanlara erişmeyi ve model çıktısını okumayı kolaylaştırır. Katman adlarının benzersiz olması gerekir.

Giriş ve çıktı boyutlarını eşleştirme​


Sequential katmanları otomatik olarak birbirine bağlar, ancak boyutları sizin doğru kurmanız gerekir. Örneğin aşağıdaki zincirde boyutlar uyumludur:

Python:
model = nn.Sequential(
    nn.Linear(10, 32),
    nn.ReLU(),
    nn.Linear(32, 16),
    nn.ReLU(),
    nn.Linear(16, 3)
)

Girişin son boyutu 10 olmalı, son katmanın çıktısı ise 3 olmalıdır. Girdi (batch_size, 10) biçimindeyse çıktı (batch_size, 3) biçiminde olur. Buradaki batch_size değeri kaç örneği aynı anda işlediğinizi belirtir ve model mimarisindeki sabit katman boyutlarıyla aynı olmak zorunda değildir.

Sequential ne zaman yeterli değildir?​


Sequential, verinin tek bir doğrusal akış izlediği modeller için uygundur. Bir katmanın çıktısını iki farklı dala vermek, iki tensörü birleştirmek, ara çıktıyı atlamak veya katmanlar arasında özel koşul kullanmak istediğinizde özel bir nn.Module sınıfı yazıp forward() metodunu tanımlamanız gerekir.

Örneğin artık bağlantı içeren bir modelde veri yalnızca sırayla ilerlemez:

Python:
import torch
from torch import nn

class ResidualBlock(nn.Module):
    def __init__(self, features):
        super().__init__()
        self.layers = nn.Sequential(
            nn.Linear(features, features),
            nn.ReLU(),
            nn.Linear(features, features)
        )

    def forward(self, x):
        return x + self.layers(x)

model = ResidualBlock(4)
x = torch.randn(2, 4)
y = model(x)

print(y.shape)  # torch.Size([2, 4])

Bu örnekte x hem doğrudan sonuca eklenir hem de Sequential içindeki katmanlardan geçirilir. Dolayısıyla yalnızca Sequential tanımıyla ifade edilemeyecek bağlantı forward() içinde açıkça kurulmuştur.

Yaygın hataları ayırt etme​

  • Boyut uyuşmazlığı: Bir Linear katmanının ilk sayısı, kendisinden önceki katmanın çıktı sayısıyla aynı olmalıdır.
  • Yanlış çıktı yorumu: Son katmanda Softmax yoksa sınıflandırma çıktısı genellikle ham skorlar, yani logitlerdir. Kayıp fonksiyonunuzun beklediği çıktı türüne göre son katmanı ve kaybı birlikte seçin.
  • Aktivasyonun unutulması: Birden fazla doğrusal katmanı aktivasyonsuz arka arkaya eklemek, bunların tek bir doğrusal dönüşüm gibi davranmasına neden olabilir. Gizli katmanlar için aktivasyon gerekip gerekmediğini model amacınıza göre belirleyin.
  • Dallanmış yapı kurmaya çalışma: Atlamalı bağlantı, birden fazla giriş veya özel tensör birleştirme varsa Sequential yerine nn.Module kullanın.
Modeli kurduktan sonra en temel doğrulama, örnek bir tensörü modelden geçirip output.shape değerini kontrol etmektir. Bu kontrol yalnızca katman boyutlarının uyumlu olduğunu gösterir; modelin doğru öğrendiğini veya tahmin doğruluğunun iyi olduğunu kanıtlamaz. Eğitim aşamasında uygun kayıp fonksiyonunu, veri biçimini ve hedef etiketlerin boyutunu ayrıca doğrulamanız gerekir.
 

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