به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

من برای کارم میخواستم الگوریتم سبک باشه و به خاطر اینکه دیتاست بزرگی دارم و الگوهای پیچیده ای ندارم، میخواستم لایه pool رو حذف کنم و به جاش conv بزارم یعنی ساختار شبکه به صورت زیر باشه ایا مشکلی هست ؟ و حتما باید این لایه باشد؟
CONV + RELU + CONV + RELU + FC

توسط (127 امتیاز)

4 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام
طراحی معماری خم و چم های مختلف و زیادی داره که توضیح اونا در اینجاو تحت یه پاسخ نمیگنجه.
بصورت خاص نیازی به استفاده از تمامی لایه ها ندارید اما باید بدونید هر لایه چه کاری میکنه و برای چه چیزی استفاده میشه اینطور میتونید مشخص کنید ایا بهش نیاز دارید یا خیر.

لایه پولینگ فقط نقش یه کاهش دهنده ابعاد رو نداره و استفاه از اون تاثیر مستقیمی در دقت و کارایی نهایی داره .
نکته ای که در مورد لایه پولینگ باید دقت کنید اینه که استفاده افراطی از اون نتیجه خوبی نداره . یعنی سعی نکنید در ابتدای شبکه (لایه های ابتدایی) پشت سر هم با فاصله کم از پولینگ استفاده کنید. یا بجای چند لایه پولینگ از یه لایه پولینگ با اندازه کرنل بزرگ استفاده کنید . داده بیشتری برای لایه ها فراهم کنید و رفته رفته گام به گام هم کاهش ابعاد داشته باشید و هم داده های مهمتر رو به لایه های بعدی ارسال کنید (از پولینگ استفاده کنید) . بعضی ها بجای پولینگ از یه لایه کانولوشن استفاده میکنن (این تو مقاله striving for simplicity اولین بار مطرح شد) اما من پیشنهاد نمیکنم این روش رو چون تنها اشتراکشون بحث کاهش ابعاد هست و ویژگی هاشون متفاوته.

شما میتونید از معماری ای که قید کردید استفاده کنید از این لحاظ مشکلی نیست . اما بحث اینجا بهینگی یا دستیابی به بهترین دقت هست با کمترین سربار ممکنه .
لایه FC در این شبکه کوچیک مشکلی ایجاد نمیکنه اما در شبکه های عمیق تر سربار زیادی تحمیل میکنه که میشه با کانولوشن 1 در 1 تا حدودی اون رو شبیه سازی کرد با تعداد پارامتر کمتر.

(در ورژن جدید مقاله ما این بحث بیشتر باز شده و انشاالله بعد اتمام کارهاش اینجا لینکش رو میزارم تا استفاده کنید. )

توسط (4.3k امتیاز)
انتخاب شده توسط
ضمن تشکر از پاسخ کامل شما
فکر می کنم لایه PooL را می شود با دو عمل متوالی کاهش دقت و بعد از آن کاهش نرخ نمونه برداری مدل کرد
مثلا برای average pooling ابتدا ورودی را از یک فیلتر پایین گذر عبور می دهیم و سپس نرخ نمونه برداری را کاهش می دهیم
با این تعریف پولینگ چیزی جز کاهش دهنده بعد نیست که البته همانطور که توضیح دادید باید درست استفاده شود اما به هر حال فقط یک کاهش دهنده بعد است
البته در مورد max pooling بجای فیلتر پایین گذر از یک فیلتر غیر خطی استفاده می شود که باز هم در بخش قابل توجهی از سیگنال نقش فیلتر پایین گذر را دارد
البته فیلتری که بالا مطرح کردم میشه گفت یه جور فیلتر ناقص هستش که اگر به شکلی که شما در پاسخ خودتان مطرح کردید به شکل کانولوشن پیاده بشه عملا در لایه اول یک فیلتر خواهیم داشت و با تعیین Stride این فیلتر می توان میزان کاهش نرخ نمونه برداری را تعیین کرد
سلام. شاید من بخوبی مطلب رو بیان نکردم. نکته حرف من اینه که صرف کاهش بعد نباید ملاک شما باشه. بعنوان مثال صرف اینکه با یک لایه کانولوشن با استراید ایکس شما دقیقا به همون کاهش ابعادی که با یک لایه پولینگ (average یا max یا...) میرسید اهمیت نداره. بصورت زیربنایی این دو طرح با هم متفاوت هستن. قبلا هم عرض کردم در کاهش بعد بله مشترک هستن اما در خصوصیتی که در شبکه و نقشی که ایفا میکنن تاثیراتشون کاملا متفاوته.
+1 امتیاز

معمولا لایه های FC را حذف می کنند
چون به شدت تعداد پارامترها را کم می کند در حالی که خیلی از دقت کم نمی شود
لایه های FC را معمولا در رقابتها اضافه می کنند چون ممکن است با چند صدم درصد از رقابت عقب بمانند
حذف لایه پول باعث افزایش تعداد پارامترها در لایه بعد می شود و نه کاهش آن
در ویدیو زیر بررسی نسبتا کاملی روی حذف بخشهای مختلف شبکه انجام شده
دقیقه 26
http://videolectures.net/deeplearning2016_fergus_neural_networks/

توسط (140 امتیاز)
+2 امتیاز

لایه های pooling ابعاد داده ورودی را کاهش می دهند بخاطر همین حذف کردن آن ها نه تنها باعث سبک شدن شبکه نمی شود , پیچیدگی محاسباتی شبکه را به شکل نمایی افزایش می دهد. پس بهتر هست بجای کاهش لایه های pooling حتی اون ها را افزایش بدید.
در لایه های کانولوشن هم می توانید سایز فیلتر را کاهش بدید و از فیلتر های ۳x3 یا 1x1 استفاده کنید که باعث کاهش سطح کانوالو شده و درنتیجه افزایش پرفورمنس می شوند.
حذف کردن لایه های fully connected - FC هم بسیار در سبک شدن شبکه موثر هست. این لایه ها به خاطر پارامتر های بسیار زیاد که بیشترین حجم از پارامتر های شبکه عمیق را تشکیل می دهند باعث کاهش شدید پرفورمنس و سنگین شدن برنامه شما خواهند شد.
درصورتی که باز هم به افزایش پرفورمنس نیاز دارید می توانید سایز ورودی را کاهش بدید یا تعداد فیلتر های کانولوشن را کم کنید که تاثیر زیادی روی دقت شبکه عصبی شما خواهند داشت.

توسط (397 امتیاز)
0 امتیاز
توسط (438 امتیاز)
...