parameters()
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 33/78
- 5 dk
parameters() metodu, modelin öğrenilebilir parametrelerini döndürür.
parameters()
parameters() modüldeki tüm öğrenilen tensörleri gezer; optimize ediciye bu verilir. named_parameters() adlarıyla birlikte döndürür:
model = nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 3))
for ad, p in model.named_parameters():
print(ad, tuple(p.shape))
# 0.weight (8, 4) 0.bias (8,) 2.weight (3, 8) 2.bias (3,)
print(sum(p.numel() for p in model.parameters())) # 67ReLU'nun parametresi olmadığı için 1 numaralı ad listede görünmez.
Dondurma ve state_dict
Bir parametrenin requires_grad'ı kapatılırsa o parametre dondurulur: gradyan almaz ve güncellenmez. Transfer öğrenmede önceden eğitilmiş katmanlar böyle korunur. state_dict() tüm parametreleri ve tamponları adlarıyla bir sözlükte toplar; model kaydetmenin standart yoludur:
for p in model[0].parameters():
p.requires_grad = False # ilk katmanı dondur
egitilebilir = sum(p.numel() for p in model.parameters() if p.requires_grad)
torch.save(model.state_dict(), "model.pt")
model.load_state_dict(torch.load("model.pt"))Uygulama Parametreleri say ve dondur
nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 3)) için parametre adlarını bir liste olarak ve toplam parametre sayısını alt alta yazdır. Ardından ilk katmanı dondurup eğitilebilir parametre sayısını yazdır.
Başlangıç kodu
import torch
from torch import nn
model = nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 3))
# buraya yazÖrnek çözüm
import torch
from torch import nn
model = nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 3))
print([ad for ad, _ in model.named_parameters()])
print(sum(p.numel() for p in model.parameters()))
for p in model[0].parameters():
p.requires_grad = False
print(sum(p.numel() for p in model.parameters() if p.requires_grad))Beklenen çıktı
['0.weight', '0.bias', '2.weight', '2.bias'] 67 27
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>nn.Sequential(nn.Linear(10, 5), nn.ReLU(), nn.Linear(5, 1))</code> kaç parametre içerir?
- 61 Doğru cevap
- 56
- 50
- 66
Açıklama: 10·5 + 5 = 55; 5·1 + 1 = 6; toplam 61.
2 Parametreleri adlarıyla gez.
for ad, p in model.____():
for ad, p in model.named_parameters():
Açıklama: named_parameters (ad, tensör) çiftleri verir.
3 Yöntemleri eşleştir.
| Kavram | Anlamı |
|---|---|
parameters() |
Öğrenilen tensörler |
named_parameters() |
Adlarıyla |
state_dict() |
Kaydedilecek sözlük |
requires_grad = False |
Dondurma |