مشتقگیری خودکار کوچک خودتان
loss.backward() در PyTorch چه میکند؟ اینجا یک نسخهی کوچکش را برای عددها میسازید.
کلاس Value یک عدد است که یادش میماند از کدام عددها (_parents) ساخته شده. هر عمل یک Value تازه میسازد و به آن یک تابع _backward میدهد که مشتق رسیده به خروجی را، ضرب در مشتق محلی، به والدها اضافه میکند:
- جمع : به هر دو والد
c.gradاضافه میشود. - ضرب : به مقدار
b.data * c.gradو به مقدارa.data * c.grad. - : به مقدار ضرب در
c.grad.
backward() همهی گرههای گراف را به ترتیب توپولوژیک مرتب میکند (هر گره بعد از والدهایش)، grad خودِ خروجی را یک میگذارد، و _backward گرهها را از آخر به اول صدا میزند.
مشتقها جمع میشوند، نه جایگزین: در d * d هر دو والد یک گرهاند و مشتقش باید شود؛ و هر پارامتر در جملهی همهی نمونهها به کار رفته.
تابع autograd(x, y, p) — که آماده است و به آن دست نزنید — با p = [w1, b1, w2, b2, w3] این زیان را میسازد:
و [L, dL/dw1, dL/db1, dL/dw2, dL/db2, dL/dw3] را برمیگرداند. شما __add__، __mul__، tanh و backward را کامل کنید.
نمونهها
[[0.35, 0.82, 0.33], [0.08, 0.91, 0.41], [-0.43, 0.46, 0.29, 0.24, 0.02]]
[0.1525, -0.0862, -0.0873, -0.0088, -0.2951, -0.2974]
برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.
ورود