Makine Öğrenmesi
hidden_size
hidden_size, LSTM'ın gizli durum vektörünün boyutudur.
hidden_size
hidden_size, gizli ve hücre durumlarının boyutudur; modelin "bellek kapasitesini" belirler. Büyük değer daha karmaşık desenleri tutar ama parametre sayısı yaklaşık karesel artar ve aşırı öğrenme riski büyür:
for H in [16, 64, 256]:
print(H, sum(p.numel() for p in nn.LSTM(8, H).parameters()))
# 16 1664 64 18944 256 272384
Tipik değerler 64-512 arasıdır; seçim, veri büyüklüğüne göre doğrulamayla yapılır.
Çift yönlü ve çok katmanlı
bidirectional=True diziyi hem baştan sona hem sondan başa işler ve iki yönün çıktılarını birleştirir; bir kelimenin anlamı sonraki kelimelere de bağlıysa yararlıdır. num_layers katmanları üst üste dizer, dropout katmanlar arasına uygulanır:
lstm = nn.LSTM(16, 32, num_layers=2, bidirectional=True, dropout=0.2, batch_first=True)
output, (h_n, c_n) = lstm(torch.zeros(4, 10, 16))
print(output.shape) # torch.Size([4, 10, 64]): 2 yön × 32
print(h_n.shape) # torch.Size([4, 4, 32]): 2 katman × 2 yön
Çift yönlü model geleceği gördüğü için canlı tahminde (bir sonraki adımı öngörmede) kullanılamaz.
Uygulama Çift yönlü LSTM
nn.LSTM(16, 32, num_layers=2, bidirectional=True, batch_first=True) katmanını (4, 10, 16) girdiye uygula. output ve h_n şekillerini aynı satırda yazdır. Ardından tek yönlü aynı yapılı LSTM'in parametre sayısı ile çift yönlününkini aynı satırda yazdır.
Örnek çözümü göster
import torch
from torch import nn
x = torch.zeros(4, 10, 16)
cift = nn.LSTM(16, 32, num_layers=2, bidirectional=True, batch_first=True)
output, (h_n, c_n) = cift(x)
print(output.shape, h_n.shape)
tek = nn.LSTM(16, 32, num_layers=2, batch_first=True)
say = lambda m: sum(p.numel() for p in m.parameters())
print(say(tek), say(cift))
Kendini test et
-
hidden_size iki katına çıkarılırsa <code>weight_hh</code> parametreleri yaklaşık kaç katına çıkar?
Cevabı göster
4 — weight_hh 4H × H şeklindedir; H iki katına çıkınca 4 kat büyür.
-
Diziyi iki yönde işle.
lstm = nn.LSTM(16, 32, ____=True, batch_first=True)
Cevabı göster
lstm = nn.LSTM(16, 32, bidirectional=True, batch_first=True)
-
Şekilleri eşleştir (H=32, 2 katman, çift yön).
- output son boyut
- 64
- h_n ilk boyut
- 4
- h_n son boyut
- 32
- dropout
- Katmanlar arası
Sıradaki ders: Özet - LSTM