CodeBlanks Logo Icon CodeBlanks

parameters()

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()))   # 67

ReLU'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

model.py
import torch
from torch import nn

model = nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 3))

# buraya yaz

Örnek çözüm

model.py
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.

Soru
for ad, p in model.____():
Cevap
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

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