راه
۴ کیو· سختپیشرفتهPYTHON۴ ثانیه · ۲۵۶ مگابایت

لایه‌ی خطی با گذر رو به عقب

nn.Linear در PyTorch وزنی به شکل (out, in) دارد و برای دسته‌ی XX (شکل n×inn \times \text{in}) حساب می‌کند:

Y=XW⊤+bY = XW^\top + b

هر لایه دو کار بلد است: forward خروجی را می‌سازد و هرچه برای مشتق لازم دارد نگه می‌دارد؛ backward(G) مشتق زیان نسبت به خروجی‌اش (G=∂L/∂YG = \partial L/\partial Y، هم‌شکل YY) را می‌گیرد، مشتق پارامترهایش را ذخیره می‌کند، و مشتق نسبت به ورودی‌اش را برمی‌گرداند تا لایه‌ی قبلی ادامه دهد:

∂L∂W=G⊤X∂L∂b=∑iGi⋅∂L∂X=G W\frac{\partial L}{\partial W} = G^\top X \qquad \frac{\partial L}{\partial b} = \sum_i G_{i\cdot} \qquad \frac{\partial L}{\partial X} = G\,W

ReLU و Sequential آماده‌اند. کلاس Linear را کامل کنید. تابع layer_grads(X, W1, b1, W2, b2, G) شبکه‌ی Linear → ReLU → Linear را می‌سازد، گذر رو به جلو را اجرا می‌کند، G را به‌عنوان مشتق خروجی به عقب می‌فرستد، و این‌ها را پشت‌سرهم برمی‌گرداند: dW1 (سطر به سطر)، db1، dW2، db2 و dX — همان چیزی که PyTorch بعد از out.backward(G) در .grad ها می‌گذارد.

نمونه‌ها

ورودی نمونه ۱
[[[0.35, 0.82], [0.33, -1.3], [0.91, 0.45]], [[-0.43, 0.46], [0.29, 0.24], [0.02, 0.44]], [-0.37, -0.08, -0.24], [[0.48, 0.03, -0.23]], [-0.39], [[-0.26], [0.01], [-0.28]]]
خروجی نمونه ۱
[0.0, 0.0, -0.0104, -0.0102, 0.0209, 0.049, 0.0, -0.0162, 0.0598, 0.0, -0.1385, -0.0332, -0.53, -0.0011, 0.0244, 0.0, 0.0, -0.0024, -0.002]

برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.

ورود