CodeBlanks Logo Icon CodeBlanks

Computational graph

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: yaprak

Grafik 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.3

Dallanan 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

model.py
import torch

# buraya yaz

Örnek çözüm

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

Soru
print(type(z.____).__name__)
Cevap
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

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