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

با تشکر

دسته بندی ها

0 امتیاز

فرض کنید می خواهیم شبکه کلاسبند کانولوشنی طراحی کنیم که بتواند 10 کلاس متفاوت را کلاسبندی کند با این شرایط که تشخیص دو تا از کلاسها سخت و تشخیص بقیه آسون باشد. با آموزش شبکه بنظر می رسد که شبکه بسرعت به طرف مینیمم ای میرود که ویژگی های 8 کلاس آسون را یادگرفته و دیگر نمی تواند ویژگی آن دو کلاس سخت را یاد بگیرند.
بنظرتون کدام روش برای آموزش شبکه مناسبتر است؟
1- دیتای ورودی را به تناسب سختی کلاسها برای کلاس های سخت بیشتر کنیم.؟
2- ابتدا کلاسبند را برای آموزش دو کلاس سخت آموزش دهیم و سپس بر روی کل دیتاست آموزش دهیم؟
3- هر روش دیگر که پیشنهاد میدهید.

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

3 پاسخ

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

سلام
راه های مختلفی هست. اولین راه افزایش دیتای بیشتر برای کلاسهای سخت شماست . دومی استفاده از انسمبل هست
و بعد از اینکه نتیجه مناسب گرفتید دانش رو ترنسفر کنید رو یک مدل (سبک تر)
راه دیگه میتونه ترین یک مدل عمومی باشه و بعد فاین تون کردن روی کلاسها بصورت تخصصی باشه.
مقاله knowledge distillation هیتونتون رو بخون اون بخش انتهایی بکارت میاد (البته قبلش باید بحث اولش رو بخونی)
البته یک راه دیگه هم میتونه فراهم کردن اطلاعات جانبی باشه تا با توجه به اون شبکه بتونه فیچرهای بهتری بدست بده. اینم ببینی بد نیست

توسط (4.3k امتیاز)
انتخاب شده توسط
ممنون از راهنماییتون آقای حسن پور
سلام. خواهش میکنم.
+1 امتیاز

سلام
در ارتباط با سوالتون منم یه ایده ای به نظرم رسید اگه خوب جواب بده
به نظرم میتونید شبکه رو ابتدا برای کلاس بندی به دو category (کلاس اول شامل 6 کلاس آسون و کلاس دوم شامل 2 کلاس سخت) آموزش بدید سپس به نظر میاد برای افتراق بین 6 کلاس آسون همون ویژگی های شبکه ابتدایی به صورت ترنسفر لرنینگ کفایت بکنه و برای تشخیص بین دو کلاس سخت هم شبکه ابتدایی رو فاین تیون کنید تا مشکلی که گفته بودید حل بشه.
البته من خیلی تازه کارم تو این زمینه و فقط در حد یک پیشنهاد بود.
موفق باشید

توسط (132 امتیاز)
ممنون از راهنماییتون
در واقع به اینصورت که یه شبکه D برای تشخیص دسته کلاسهای سخت و یا آسون
یه شبکه H برای تشخیص کلاسهای سخت از هم
یکه شبکه E برای تشخیص کلاسهای آسون از هم
در واقع به صورت سلسله مراتبی
+1 امتیاز

سلام
من توی یه مساله مشابه روشی رو پیاده کردم که شاید به درد شما هم بخوره. ابزار Keras ویژگی داره به اسم Class_weight که توی اون شما میتونی برای بعضی از کلاس ها وزن بیشتری تعریف کنی و به بعضی وزن کمتری بدی. به این شکل اگر حتی برای کلاس های سخت نمونه بیشتری نمیتونین فراهم کنین میتونین وزن اون ها رو توی loss function بالا ببرین تا بهتر اموزش داده بشن. مشابه این گزینه چیزی به اسم sample_weight هم هست که به بعضی نمونه ها نسبت به بقیه ارزش بیشتری میده. توی تنسورفلو هم فکر کنم باشن اینا.

توسط (200 امتیاز)
ممنون از راهنماییتون
...