CodeBlanks Logo Icon CodeBlanks

Hidden state

Hidden state, RNN'ın önceki adımdaki belleğidir.

Gizli durum

nn.RNN iki çıktı döndürür: her adımın gizli durumlarını içeren output ve son adımın gizli durumu h_n. batch_first=True ile girdi (toplu veri, zaman, özellik) şeklinde verilir:

rnn = nn.RNN(input_size=4, hidden_size=8, batch_first=True)
x = torch.zeros(3, 5, 4)          # 3 dizi, 5 adım, 4 özellik
output, h_n = rnn(x)
print(output.shape)               # torch.Size([3, 5, 8])
print(h_n.shape)                  # torch.Size([1, 3, 8])  (katman, toplu, gizli)

Tek katmanlı, tek yönlü RNN'de output[:, -1] ile h_n[0] aynıdır.

Parametreler

Bir RNN katmanının parametreleri dizinin uzunluğuna bağlı değildir: W_ih (gizli × girdi), W_hh (gizli × gizli) ve iki sapma:

rnn = nn.RNN(4, 8)
for ad, p in rnn.named_parameters():
    print(ad, tuple(p.shape))
# weight_ih_l0 (8, 4)  weight_hh_l0 (8, 8)  bias_ih_l0 (8,)  bias_hh_l0 (8,)
print(sum(p.numel() for p in rnn.parameters()))   # 32 + 64 + 16 = 112

num_layers=2 ile RNN'ler üst üste dizilir: ikinci katman birincinin çıktı dizisini girdi olarak alır.

Uygulama RNN çıktıları

nn.RNN(4, 8, batch_first=True) katmanını (3, 5, 4) rastgele girdiye uygula. output ve h_n şekillerini aynı satırda, ardından output[:, -1] ile h_n[0]'ın aynı olduğunu torch.allclose ile, son olarak parametre sayısını yazdır.

Başlangıç kodu

model.py
import torch
from torch import nn

x = torch.randn(3, 5, 4)

# buraya yaz

Örnek çözüm

model.py
import torch
from torch import nn

x = torch.randn(3, 5, 4)

rnn = nn.RNN(4, 8, batch_first=True)
output, h_n = rnn(x)
print(output.shape, h_n.shape)
print(torch.allclose(output[:, -1], h_n[0]))
print(sum(p.numel() for p in rnn.parameters()))

Beklenen çıktı

torch.Size([3, 5, 8]) torch.Size([1, 3, 8])
True
112

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>batch_first=True</code> verilmezse <code>nn.RNN</code> girdiyi hangi sırada bekler?

  • (zaman, toplu veri, özellik) Doğru cevap
  • (toplu veri, zaman, özellik)
  • (özellik, zaman)
  • Sıra fark etmez

Açıklama: PyTorch'un RNN varsayılanı zaman eksenini başa koyar.

2 Toplu veri boyutunu başa al.

Soru
rnn = nn.RNN(4, 8, ____=True)
Cevap
rnn = nn.RNN(4, 8, batch_first=True)

Açıklama: batch_first=True girdi ve çıktıyı (N, T, ·) yapar.

3 Şekilleri eşleştir (N=3, T=5, I=4, H=8).

Kavram Anlamı
girdi (3, 5, 4)
output (3, 5, 8)
h_n (1, 3, 8)
weight_hh_l0 (8, 8)

İleri seviye bölümündeki tüm dersler