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

PyTorch LSTM ile zaman bağımlılığı nasıl modellenir?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
LSTM ile zaman bağımlılığı modellemek için veriyi ardışık zaman pencerelerine ayırıp her pencereyi PyTorch’un nn.LSTM katmanına vermeniz gerekir. LSTM, her zaman adımında girdiyi önceki gizli durumla birleştirerek geçmiş bilgiyi taşır; son gizli durum veya tüm zaman adımlarının çıktısı sonraki tahmin katmanına aktarılır. Aşağıdaki en küçük örnek, geçmiş 3 değerden sonraki değeri tahmin eden çalışır bir model iskeletidir.

Verinin zaman penceresine dönüştürülmesi​


Önce tek boyutlu zaman serisini, giriş dizileri ve hedef değerlerden oluşan örneklere ayırın. Varsayımsal olarak seri [10, 12, 13, 15, 18, 21] ve pencere uzunluğu 3 ise ilk örnek [10, 12, 13], hedef ise 15 olur. Sonraki örnek [12, 13, 15] ve 18 şeklinde ilerler.

Modelin beklediği biçim (batch, sequence, feature) olarak kurulursa her örnekteki zaman adımlarını ve özellik sayısını açıkça ayırabilirsiniz. Tek değişkenli seride feature=1 olur.

Python:
import torch
from torch import nn

values = torch.tensor([10., 12., 13., 15., 18., 21., 23., 25.])
window = 3

X, y = [], []
for i in range(len(values) - window):
    X.append(values[i:i + window])
    y.append(values[i + window])

X = torch.stack(X).unsqueeze(-1)  # (örnek, zaman adımı, özellik)
y = torch.stack(y).unsqueeze(-1)  # (örnek, 1)

print(X.shape)  # torch.Size([5, 3, 1])
print(y.shape)  # torch.Size([5, 1])

LSTM katmanının kurulması​


batch_first=True kullanıldığında giriş biçimi (batch, sequence, feature) olur. LSTM’nin çıktısı her zaman adımı için gizli durum içerir. Yalnızca pencerenin sonundaki durumu kullanmak, sonraki tek değeri tahmin etmek için yeterlidir.

Python:
class LSTMRegressor(nn.Module):
    def __init__(self, input_size=1, hidden_size=32, num_layers=1):
        super().__init__()
        self.lstm = nn.LSTM(
            input_size=input_size,
            hidden_size=hidden_size,
            num_layers=num_layers,
            batch_first=True
        )
        self.output = nn.Linear(hidden_size, 1)

    def forward(self, x):
        sequence_output, (hidden_state, cell_state) = self.lstm(x)
        last_output = sequence_output[:, -1, :]
        return self.output(last_output)

model = LSTMRegressor()
prediction = model(X)
print(prediction.shape)  # torch.Size([5, 1])

Burada sequence_output[:, -1, :] her pencerenin son zaman adımındaki gizli temsili seçer. hidden_state[-1] de son LSTM katmanının son gizli durumunu verir; tek katmanlı modelde iki yaklaşım aynı amaca hizmet eder. Birden fazla katman kullanıldığında son katmanı seçtiğinizden emin olun.

Modelin eğitilmesi​


Regresyon türü, yani sayısal değer tahmini için genellikle ortalama karesel hata kullanılabilir. Gerçek bir uygulamada veriyi zaman sırasını bozmadan eğitim ve doğrulama bölümlerine ayırın; gelecekteki değerleri eğitim verisine karıştırmak ölçümü yanıltır.

Python:
loss_function = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

for epoch in range(200):
    model.train()
    optimizer.zero_grad()

    prediction = model(X)
    loss = loss_function(prediction, y)
    loss.backward()
    optimizer.step()

    if (epoch + 1) % 50 == 0:
        print(f"Epoch: {epoch + 1}, loss: {loss.item():.4f}")

Kayıp değerinin azalması, modelin verilen eğitim pencerelerine daha iyi uyduğunu gösterir; gelecekte de doğru tahmin yaptığını tek başına kanıtlamaz. Bunu görmek için eğitimde kullanılmayan, zaman olarak daha sonraki pencerelerde değerlendirme yapın.

Sonucun doğru yorumlanması​


Tahmin çıktısı (batch, 1) biçimindedir ve her satır bir pencere için tek değer içerir. Tahminler sürekli aynı değere yaklaşıyorsa model uzun dönem eğilimini öğrenememiş, veri ölçeği sorunlu veya model kapasitesi yetersiz olabilir. Öğrenme sırasında kayıp düşüyor ancak doğrulama kaybı yükseliyorsa aşırı öğrenme vardır; pencere, katman veya gizli birim sayısını artırmadan önce eğitim-doğrulama ayrımını ve veri sızıntısını kontrol edin.

Birden fazla özellik kullanacaksanız X tensörünün son boyutunu özellik sayısına göre değiştirin ve input_size değerini aynı sayıya ayarlayın. Sınıflandırmada son katmanın çıktı boyutu sınıf sayısı olmalı ve hedef biçimi kullanılan kayıp fonksiyonuyla uyumlu hazırlanmalıdır. LSTM, geçmiş penceredeki bağımlılıkları modelleyebilir; ancak nedensellik, ani dış etkenler veya eğitim verisinde hiç bulunmayan uzun dönem davranışlar hakkında otomatik olarak güvenilir bilgi sağlamaz.
 
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