Computational graph
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 23/78
- 5 dk
Autograd, işlemleri bir hesap grafiği olarak kaydeder.
Hesap grafiği
Autograd her işlemi bir düğüm olarak kaydeder ve yönlü bir hesap grafiği kurar. Her ara tensörün grad_fn özniteliği onu üreten işlemi gösterir; backward() bu grafiği tersinden gezerek zincir kuralını uygular:
x = torch.tensor(2.0, requires_grad=True)
y = x * 3
z = y.exp()
print(type(y.grad_fn).__name__) # MulBackward0
print(type(z.grad_fn).__name__) # ExpBackward0
print(x.grad_fn) # None: yaprakGrafik her ileri yayılımda yeniden kurulur (dinamik grafik); bu yüzden Python'un if ve döngüleri modelin içinde serbestçe kullanılabilir.
Zincir kuralı adım adım
Grafik geriye gezilirken her düğüm kendi yerel türevini gelen gradyanla çarpar. z = exp(3x) için:
# ileri: x=2 -> y=3x=6 -> z=exp(y)
# geri: dz/dy = exp(y) = exp(6)
# dy/dx = 3
# dz/dx = 3·exp(6)
z.backward()
print(round(x.grad.item(), 1)) # 1210.3Dallanan grafiklerde bir tensör birden çok yerde kullanılmışsa gradyanlar toplanır: y = x * x için dy/dx = x + x = 2x.
Uygulama Grafiği izle
x = torch.tensor(1.0, requires_grad=True) için a = x * x, b = a + x hesapla. a ve b'nin grad_fn sınıf adlarını aynı satırda yazdır. Ardından b.backward() çağırıp x.grad.item() değerini yazdır (db/dx = 2x + 1).
Başlangıç kodu
import torch
# buraya yazÖrnek çözüm
import torch
x = torch.tensor(1.0, requires_grad=True)
a = x * x
b = a + x
print(type(a.grad_fn).__name__, type(b.grad_fn).__name__)
b.backward()
print(x.grad.item())Beklenen çıktı
MulBackward0 AddBackward0 3.0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Yaprak bir tensörün <code>grad_fn</code> değeri nedir?
- AddBackward0
- Kendisi
- 0
- None Doğru cevap
Açıklama: Yapraklar bir işlemle üretilmemiştir; grafiğin başlangıç noktalarıdır.
2 Tensörü üreten işlemi göster.
print(type(z.____).__name__)
print(type(z.grad_fn).__name__)
Açıklama: grad_fn grafikteki düğümdür.
3 Düğümleri eşleştir.
| Kavram | Anlamı |
|---|---|
x * 3 |
MulBackward0 |
y.exp() |
ExpBackward0 |
a + b |
AddBackward0 |
yaprak |
grad_fn = None |