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

PyTorch GRU katmanında sıralı veri nasıl işlenir?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
GRU katmanında sıralı veri, zaman adımı boyunca işlenecek değerlerin aynı örneğe ait olacak şekilde düzenlenmesiyle kullanılır. Mini gruplu PyTorch kullanımında en kritik ayrım, batch_first seçimine göre giriş tensörünün şeklidir: batch_first=True kullanırsanız giriş [batch, sequence, feature], varsayılan değeri kullanırsanız [sequence, batch, feature] olmalıdır. Doğru şekli kurup GRU çıktısını ve son gizli durumu ayırdığınızda, her zaman adımı için tahmin veya yalnızca dizinin son durumunu kullanabilirsiniz.

GRU girişinin şekli nasıl olmalı?​


Bir sıralı veri kümesinde üç boyut bulunur:
  • Batch: Aynı anda işlenen örnek sayısıdır.
  • Sequence: Her örnekteki zaman adımı veya sıralı öğe sayısıdır.
  • Feature: Her zaman adımındaki özellik sayısıdır.
Örneğin 32 örnek, her örnekte 10 zaman adımı ve her adımda 8 özellik varsa, batch_first=True ile giriş şekli [32, 10, 8] olur. GRU tanımlanırken input_size=8 verilmelidir; input_size, toplam zaman adımı sayısını değil, tek bir zaman adımındaki özellik sayısını ifade eder.

Sıralı veriyi GRU ile işleme​


Aşağıdaki örnek, her zaman adımı için bir çıktı üretir. Varsayımsal girdide 4 örnek, 6 zaman adımı ve 3 özellik vardır; hedef, her örnek için 2 sınıftan birini tahmin etmektir.
  1. Girdiyi üç boyutlu tensöre dönüştürün. batch_first=True kullanıyorsanız tensörün şekli [batch, sequence, feature] olmalıdır.
  2. GRU katmanını tanımlayın. input_size özellik sayısına, hidden_size GRU’nun sakladığı gizli durum boyutuna karşılık gelir.
  3. GRU çıktısını alın. output, bütün zaman adımlarındaki gizli durumları; hidden, son zaman adımından sonra oluşan gizli durumu içerir.
  4. Görev için uygun çıktıyı seçin. Her zaman adımında tahmin gerekiyorsa output tensörünü, dizinin tamamını temsil eden tek tahmin gerekiyorsa son zaman adımını kullanın.
Python:
import torch
from torch import nn

class GRUClassifier(nn.Module):
    def __init__(self, input_size=3, hidden_size=16, num_classes=2):
        super().__init__()
        self.gru = nn.GRU(
            input_size=input_size,
            hidden_size=hidden_size,
            batch_first=True
        )
        self.classifier = nn.Linear(hidden_size, num_classes)

    def forward(self, x):
        # x: [batch, sequence, feature]
        output, hidden = self.gru(x)

        # Son zaman adımının çıktısı: [batch, hidden_size]
        last_output = output[:, -1, :]
        logits = self.classifier(last_output)

        return logits, output, hidden

x = torch.randn(4, 6, 3)
model = GRUClassifier()

logits, output, hidden = model(x)

print(logits.shape)  # torch.Size([4, 2])
print(output.shape)  # torch.Size([4, 6, 16])
print(hidden.shape)  # torch.Size([1, 4, 16])

Bu dolgusuz, sabit uzunluklu ve tek yönlü örnekte output[:, -1, :], her örneğin son geçerli zaman adımındaki GRU çıktısını seçer. Dolgulu değişken uzunluklu veride bu indis kısa dizilerin son gerçek adımı olmayabilir. logits şeklinin [4, 2] olması, dört örneğin her biri için iki sınıfa ait ham skor üretildiğini gösterir. Bu değerler henüz olasılık değildir; eğitimde genellikle CrossEntropyLoss kullanılıyorsa modele ham logits verilir.

output ile hidden arasındaki fark​


output, dizinin her zaman adımı için gizli durumu saklar. Sıralı etiketleme, zaman serisinin her adımında tahmin veya sonraki katmanlara bütün zaman akışını aktarma gibi görevlerde kullanılır. hidden ise dizinin sonunda oluşan gizli durumu taşır ve özellikle dizinin tamamından tek çıktı üretilecek sınıflandırma görevlerinde başlangıç noktası olabilir.

Mini gruplu, tek katmanlı ve tek yönlü GRU’da hidden şekli [1, batch, hidden_size] olur. batch_first yalnız giriş ve output düzenini etkiler; hidden içindeki batch eksenini değiştirmez. Katman sayısı veya yön sayısı arttığında ilk boyut num_layers * num_directions olur. Bu nedenle çok katmanlı ya da çift yönlü bir modelde hidden[-1] ifadesi, seçilen yapıya göre son katmanın son yönündeki durumu verir; çift yönlü çıktıları birleştirmek için yön boyutunu ayrıca ele almak gerekir.

Değişken uzunluktaki diziler​


Aynı batch içindeki dizilerin uzunlukları farklıysa kısa diziler genellikle dolgu değerleriyle eşitlenir. Dolgu zaman adımlarının gerçek veri gibi işlenmesini önlemek için dolgulu girdiyi gerçek uzunluklarla pack_padded_sequence kullanarak paketleyip GRU’ya verin; çıktıyı gerekirse pad_packed_sequence ile açın. Uzunluklar girdi örnekleriyle aynı sırada olmalıdır; tensör olarak veriliyorsa CPU’da tutulur. enforce_sorted=True azalan uzunluk sırası ister; False hem sıralı hem sırasız girdide kullanılabilir. Tek yönlü sınıflandırmada paketlenmiş girdinin son gizli durumu, son gerçek zaman adımını temsil eder.

Şekil hatalarını nasıl ayırt edersiniz?​


input.size(-1) değeri GRU’nun input_size değerinden farklıysa özellik boyutu yanlış kurulmuştur. İki boyutlu [sequence, feature] girdi, GRU’nun desteklediği grup içermeyen tek dizi biçimidir; bu durumda batch_first dikkate alınmaz ve hidden şekli [num_layers * num_directions, hidden_size] olur. Bu rehberdeki mini gruplu sınıflandırıcıyı kullanmak için tek diziye x.unsqueeze(0) ile batch boyutu ekleyebilirsiniz. Sonuç beklenenden farklıysa önce x.shape, output.shape ve hidden.shape değerlerini yazdırın. En sık hata, [batch, feature, sequence] biçimindeki veriyi GRU’nun beklediği [batch, sequence, feature] biçimine çevirmeden vermektir; gerekiyorsa boyutları transpose veya permute ile yeniden düzenleyin.
 
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