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

با تشکر

0 امتیاز

سلام
من نیاز داشتم یک شبکه آموزش بدم که بتونه عکس چهره رو بگیره و سن شخص رو خروجی بده
ولی در حین تلاش برای آموزش دادن شبکه به مشکلاتی برخوردم و یک سری سوال برام پیش اومده ( شبکه هایی هست در گیت هاب که آموزش دادن ولی من میخواستم خودم از صفر آموزش بدم) حدودا برای هر سنی نزدیک200 تا 400 تصویر در دیتاست وجود داره و با استفاده از generator تصاویر agument میشن

اول از همه من معماری شبکه رو با حالت های زیر تست کردم:

  1. چهار تا لایه conv+batchNorm+relu+maxpool+Dropout که تعداد فیلترها هم بین 32 تا 64 در هر لایس
  2. استفاده از inceptionv3 با تعویض لایه آخر با 60 نرون(سن 1 تا 60 سال) با activation softmax به 3 صورت: آموزش همه لایه ها ، فریز همه لایه های قبل softmax ، آموزش ماژول inception آخری
  3. استفاده از InceptionResnetv2 مثل بالا
  4. استفاده از نورون خطی در لایه ی آخر به جای 60 کلاس در موارد بالا

مشکلاتی که بهش برخوردم:

  1. در بعضی موارد از ابتدا loss ولیدیشن کمتر از train بود!؟
    2.در بعضی موارد از همون اولین epoch آموزش loss و acc ولیدیشن افزایش پیدا میکنه ؟!

سوالاتی که برام پیش اومده:

  1. آیا استفاده از شبکه هایی که برای ImageNet آموزش دیدن فقط توی مسئله کلاس بندی بین چند تا شی به درد میخوره یا برای مسائلی مثل این هم فایده داره ازش استفاده بشه؟

  2. چطوری میشه که از همون اولین epoch ولیدیشن loss شروع به افزایش میکنه؟!

3.یک مبحثی هست که اگر از یک جایی به بعد ولیدیشن loss شروع به افزایش کرد ولی train loss داره کم میشه یعنی overfit شده ولی در عمل همیشه این اتفاق نمیفته و بعضا val loss حالت نویزی داره و شاید حداقل 200 epoch دیگه لازم باشه تا واقعا مشخص شه سیر نزولی داره یا نه .(مخصوصا جاهایی که رگرسیون هست و val_acc نمیشه رسم کرد) آیا شما تجربه مشابه این دارین یا همیشه در10 تا 20 epoch مشخص میشه؟!

4.لایه آخر اگر یک نورون باشه با activation خطی بهتره یا کلاس بندی باشه با 60 تا کلاس؟

  1. در چه مواردی مشکل 1 رخ میده؟ علتش چیه؟

ممنون

val_loss
val_loss
val_acc
val_acc

سوال شده توسط (410 امتیاز)

1 پاسخ

+1 امتیاز

سلام دوست عزیز
بنده تا جایی که میتونم راهنماییتون میکنم. دوستان اگه اشکالی وجود داره اصلاح کنند.

شبکه 1نباید dropout استفاده کنید. dropout رو بعد از لایه هایی میگذارن که تعداد پارامترهای زیادی داره مثل لایه های fc - شبکه های conv پارامتر زیادی ندارن - پس شما بهتره قبل از dropout از لایه fc استفاده کنید.

شبکه 2 : آموزش تمامی لایه ها کار اشتباهی هستش - فریز همه لایه های قبل softmax یعنی اینکه شما فقط لایه softmax رو تیون کردید!!! لایه softmax که پارامتر قابل تیون نداره!!! - حالت سوم منطقی تر بنظر میرسه (البته بنده با شبکه inceptionv3 کار نکردم) شما بایستی لایه های کلاسبند رو تیونن کنید.

شبکه 3 : شبکه InceptionResnetv2 فرق چندانی با inceptionv3 نداره
شبکه 4: استفاده از نورون خطی در لایه ی آخر به جای 60 کلاس میتونه راه حل خوبی باشه احتمالا جواب بده

مشکلاتتون ممکنه به خاطر نرخ آموزشتون باشه. وقتی از شبکه ترین شده استفاده میکنید بایستی نرخ آموزش شما 0.1 نرخ آموزشی باشه که شبکه رو برای اولین بار ترین کردند.

در مورد سوالاتتون:
-- هر چه توزیع نمونه هایی که شبکه پایه با آن آموزش دیده به توزیع تسک جدیدتون نزدیکتر باشه بهتره - مثلا در مورد تسک شما- تصاویر شبکه شما از به توزیع تصاویر imageNet بسیار نزدیک است (شبیه هم هستند) و براحتی میتونید از این شبکه ها استفاده کنید. و کافیست صرفا تعدادی از لایه های کلاسبند رو تیون کنید. اگه تصاویر شما مثلا تصاویر x-ray بود آنگاه توزیع تصاویر کمی با هم فرق میکرد و بهتر بود برای بهتر جواب گرفتن نه تنها تمامی لایه های کلاسبند بلکه یکی دو لایه عقبتر نیز تیون شوند.
-- ممگنه بخاطر نرخ آموزش باشه
-- اینکه تو چندمین ایپاک overfit رخ بده بستگی به حجم دیتا - تعداد پارامترها - ساختار شبکه - نرخ آموزش و عوامل دیگه داره
-- بنظر بنده لایه آخر اگر یک نورون باشه با activation خطی بهتره - ولی باید تست کنید و اینکه ببینید بقیه مقالات چی کار کردند

موفق باشید.

پاسخ داده شده توسط (830 امتیاز)
...