خطوات الاستخدام
الخطوة 1: فهم معادلة حساب خرج طبقة التجميع. تُستخدم طبقات التجميع (Pooling Layers) في الشبكات العصبية الالتفافية لتقليل أبعاد البيانات مع الاحتفاظ بالمعلومات الهامة. يتم حساب حجم الخرج (Output Size) باستخدام المعادلة: outputDim = floor((inputDim - poolSize) / stride) + 1. حيث inputDim هو البعد المدخل (الطول أو العرض)، poolSize هو حجم نافذة التجميع، وstride هو الخطوة التي تتحرك بها النافذة. يجب فهم أن هذه المعادلة تفترض عدم استخدام padding، وإذا تم استخدام padding فقد تتغير.
الخطوة 2: إدخال البعد المدخل (inputDim). هذا هو البعد المكاني (الطول أو العرض) لخريطة المعالم (Feature Map) الداخلة إلى طبقة التجميع. عادة ما يكون رقمًا صحيحًا موجبًا. يجب أن يكون أكبر من poolSize للحصول على خرج صحيح. على سبيل المثال، إذا كانت خريطة المعالم بحجم 32×32، فإن inputDim = 32.
الخطوة 3: إدخال حجم نافذة التجميع (poolSize). هو حجم النافذة (عادة مربعة) التي تجمع القيم. على سبيل المثال، poolSize = 2 يعني نافذة 2×2. يجب أن يكون poolSize ≤ inputDim. يؤثر حجم النافذة على درجة الاختزال: كلما زاد poolSize، قلت أبعاد الخرج.
الخطوة 4: إدخال خطوة التجميع (stride). هي المسافة التي تتحرك بها النافذة في كل خطوة. عادة ما تكون stride = 1 أو stride = 2. إذا كانت stride = 1، تكون النوافذ متداخلة بشكل كبير. إذا كانت stride = 2، لا يوجد تداخل في حالة poolSize = 2. يجب أن يكون stride ≥ 1.
الخطوة 5: حساب خرج طبقة التجميع. تقوم الآلة الحاسبة بتطبيق المعادلة outputDim = floor((inputDim - poolSize) / stride) + 1. التحقق من أن الناتج عدد صحيح موجب. إذا كان الناتج أقل من 1، فالإدخالات غير صالحة. فهم أهمية هذه القيمة: فهي تحدد أبعاد خريطة المعالم الناتجة، والتي تؤثر على عدد المعلمات والذاكرة المستخدمة في الطبقات التالية.
أمثلة محلولة
تطبيقات عملية على حجم خرج طبقة التجميع بخطوات الحل كاملة.
الحل
نقوم بتطبيق المعادلة على أحد الأبعاد (سنحسب الطول والعرض متماثلين): inputDim = 64, poolSize = 2, stride = 2. باستخدام المعادلة: outputDim = floor((64 - 2) / 2) + 1 = floor(62 / 2) + 1 = 31 + 1 = 32. إذًا، أبعاد الخرج هي 32×32. هذا يعني أننا قللنا الأبعاد إلى النصف. هذا شائع في الشبكات العصبية لتقليل حجم البيانات وتسريع الحساب. يرجى الملاحظة أن حاصل القسمة 62/2 = 31 (صحيح) لذا لا نحتاج للـ floor، ولكن في حالات أخرى قد يكون ناتج القسمة كسرًا. على سبيل المثال، إذا كان inputDim = 33, poolSize = 2, stride = 2, فإن (33-2)/2 = 31/2 = 15.5، والـ floor يعطي 15، ثم +1 = 16. لذا يجب الانتباه إلى أن الخرج يمكن أن يكون غير صحيح إذا لم تكن القيم متوافقة.
الحل
المعادلة نفسها: outputDim = floor((inputDim - poolSize) / stride) + 1. inputDim = 112, poolSize = 3, stride = 2. أولاً: (112 - 3) = 109. ثم 109 / 2 = 54.5. أخذ floor يعطي 54. ثم +1 = 55. إذًا أبعاد الخرج 55×55. لاحظ أن استخدام حجم نافذة فردي مع خطوة 2 يمكن أن يكون مقبولاً في بعض التصاميم. هذا المثال يوضح أن الخرج ليس بالضرورة نصف المدخلات بشكل تام، بل يتأثر بحجم النافذة والخطوة. إذا أردنا خرجًا متناسقًا، يجب اختيار poolSize و stride بحيث (inputDim - poolSize) يقبل القسمة على stride. في هذا المثال، 109 لا يقبل القسمة على 2، لذا نستخدم floor. هذا قد يؤدي إلى فقدان بعض المعلومات على الحواف.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة حجم خرج طبقة التجميع.
مثال 1: خريطة 64×64 بنافذة 2×2 وخطوة 2 → 32×32
- بُعد الإدخال
- 64
- حجم نافذة التجميع
- 2
- الخطوة
- 2
مثال 2: 112×112 بنافذة 3×3 وخطوة 2 → 55 مع خلية حافة غير مغطاة
- بُعد الإدخال
- 112
- حجم نافذة التجميع
- 3
- الخطوة
- 2
حالة الفرد 33 مع نافذة 2 وخطوة 2 → 16 (floor من 15.5)
- بُعد الإدخال
- 33
- حجم نافذة التجميع
- 2
- الخطوة
- 2
224×224 بنافذة 2×2 → 112×112 بلا فقد حواف
- بُعد الإدخال
- 224
- حجم نافذة التجميع
- 2
- الخطوة
- 2
تجميع شامل: نافذة بحجم الخريطة كلها → خلية واحدة (99.96% فقد)
- بُعد الإدخال
- 50
- حجم نافذة التجميع
- 50
- الخطوة
- 50