Hidden state
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 48/78
- 5 dk
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 = 112num_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
import torch
from torch import nn
x = torch.randn(3, 5, 4)
# buraya yazÖrnek çözüm
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.
rnn = nn.RNN(4, 8, ____=True)
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) |