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

کانولوشن، رو به عقب

لایه‌ی کانولوشن با گام یک و بی‌حاشیه، Yf,i,j=bf+∑c,u,vKf,c,u,v Xc,i+u,j+vY_{f,i,j} = b_f + \sum_{c,u,v} K_{f,c,u,v}\,X_{c,i+u,j+v}. اگر G=∂L/∂YG = \partial L / \partial Y (هم‌شکل YY) رسیده باشد، با قاعده‌ی زنجیره‌ای:

∂L∂Kf,c,u,v=∑i,jGf,i,j Xc,i+u,j+v∂L∂bf=∑i,jGf,i,j\frac{\partial L}{\partial K_{f,c,u,v}} = \sum_{i,j} G_{f,i,j}\,X_{c,i+u,j+v} \qquad \frac{\partial L}{\partial b_f} = \sum_{i,j} G_{f,i,j} ∂L∂Xc,m,n=∑f∑u,vGf, m−u, n−v Kf,c,u,v\frac{\partial L}{\partial X_{c,m,n}} = \sum_{f}\sum_{u,v} G_{f,\,m-u,\,n-v}\,K_{f,c,u,v}

(در آخری فقط جمله‌هایی که m−um - u و n−vn - v داخل YY می‌افتند.) راه ساده‌تر برای فکر کردن: هر خانه‌ی خروجی (f,i,j)(f, i, j) از تکه‌ی k×kk \times k زیرش ساخته شده؛ پس Gf,i,jG_{f,i,j} ضرب در تکه به مشتق فیلتر ff اضافه می‌شود، و Gf,i,jG_{f,i,j} ضرب در فیلتر به مشتق همان تکه از ورودی.

تابع conv_backward(X, K, G) با X به شکل C×H×WC \times H \times W، K به شکل F×C×k×kF \times C \times k \times k و G به شکل F×(H−k+1)×(W−k+1)F \times (H - k + 1) \times (W - k + 1)، پشت‌سرهم برمی‌گرداند: مشتق K (صاف‌شده)، مشتق عرض از مبدأها، و مشتق X (صاف‌شده).

نمونه‌ها

ورودی نمونه ۱
[[[[0.35, 0.82, 0.33], [-1.3, 0.91, 0.45], [-0.54, 0.58, 0.36]]], [[[[0.15, 0.01], [0.27, -0.37]]]], [[[-0.16, -0.48], [0.6, 0.04]]]]
خروجی نمونه ۱
[-1.1932, 0.2744, -0.5296, 0.0008, 0.0, -0.024, -0.0736, -0.0048, 0.0468, -0.0584, 0.178, 0.162, -0.2112, -0.0148]

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

ورود