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

لایه‌ی کانولوشن

تابع conv2d(X, K, b, stride, pad) همان کاری را می‌کند که nn.Conv2d برای یک تصویر:

  • X تصویر ورودی با شکل C×H×WC \times H \times W (کانال، ارتفاع، عرض)؛
  • K فیلترها با شکل F×C×k×kF \times C \times k \times k — هر فیلتر به اندازه‌ی همه‌ی کانال‌های ورودی عمق دارد؛
  • b عرض از مبدأ هر فیلتر، به طول FF؛
  • stride گام لغزیدن فیلتر، و pad تعداد ردیف‌ها و ستون‌های صفر که دور تصویر اضافه می‌شود.

اول دور هر کانال pad صفر بگذارید. بعد خروجی فیلتر ff در جای (i,j)(i, j):

Yf,i,j=bf+∑c=1C∑u=0k−1∑v=0k−1Kf,c,u,v  Xc,  is+u,  js+vpadY_{f,i,j} = b_f + \sum_{c=1}^{C}\sum_{u=0}^{k-1}\sum_{v=0}^{k-1} K_{f,c,u,v}\;X^{\text{pad}}_{c,\;i s + u,\;j s + v}

با ss = stride. اندازه‌ی خروجی:

Hout=⌊H+2p−ks⌋+1Wout=⌊W+2p−ks⌋+1H_{\text{out}} = \Big\lfloor \frac{H + 2p - k}{s} \Big\rfloor + 1 \qquad W_{\text{out}} = \Big\lfloor \frac{W + 2p - k}{s} \Big\rfloor + 1

خروجی: آرایه‌ی F×Hout×WoutF \times H_{\text{out}} \times W_{\text{out}}. (این همان «همبستگی متقابل» است که کتابخانه‌های یادگیری عمیق کانولوشن می‌نامند — فیلتر برعکس نمی‌شود.)

نمونه‌ها

ورودی نمونه ۱
[[[[0.35, 0.82, 0.33], [-1.3, 0.91, 0.45], [-0.54, 0.58, 0.36], [0.29, 0.03, 0.55]]], [[[[-0.37, -0.08], [-0.24, 0.3]]]], [0.01], 1, 0]
خروجی نمونه ۱
[[[0.3999, -0.4032], [0.7218, -0.3939], [0.1028, -0.0756]]]

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

ورود