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

با تشکر

دسته بندی ها

0 امتیاز

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

سوال اینکه :
برای تک تک اون حالت ها چه نوع ترینی رو پیشنهاد میکنید منظورم اینکه آیا فقط لایه اخر رو ترین میکنیم یا اینکه کل fc ها رو ترین میکنیم یا اینکه حتی وارد لایه های سطح انتزاعی پایین تر و کانالوشن ها و در واقع لایه های استخراج کننده ویژگی هم می شویم ؟ لطفا در صورت امکان دلیلش رو بگید چرا ؟
متشکر

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

2 پاسخ

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

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

حالت سوم و چهارم رو متوجه نشدم منظور شما تفاوت بین دیتاست مبدا و مقصد هست در فاین تونینگ ؟ اگر اره توضیح بالا صادق هست اگر چیز دیگه ای هست در کامنت لطفا بفرما

توسط (4.3k امتیاز)
انتخاب شده توسط
سلام. پس منظور دیتاست مقصد (هدف) شماست. در این صورت هم باز فراهم کردن فیلترهای متنوع بهترین کارایی رو بشما میده. یعنی چیزی که اینجا اهمیت داره نوع کلاس شما نیست اینکه متفاوت هستن یا نه
مهم رسیدن شبکه به ویژگی های مناسبی هست که بتونه بخوبی تمایز بده. به همین صورت در هر دو حالت استفاده شما از یک دیتاست خیلی متنوع مثل ایمیج نت میتونه تاثیر خیلی مثبتی در کار شما بزاره .
دوتا حالت هست نمیتونم خوب درکشون کنم
۱- در لایه های اول ما فیچرهای سطح پایینی داریم همان لبه ها و منحین ها و رنگ ها و .... و به لایه بعدی که میرسیم یخوره لول فیچرها بالا میره و تا اینکه میرسه به اخرین لایه کانالوشن قبل از fc ها
سوالم اینکه ما هرچقدر به سمت سطح انتزاعی بالاتر حرکت میکنیم چه چیزهایی رو بدست میاوریم ؟ فیچرهای سطح بالا ؟ منظور از فیچرهای سطح بالا چیه ؟ فرضا سر آدم ؟ تایر ماشین ؟ و ... و بعدش توسط fc ها این تایرماشین و بدنه خودرو و آینه و .... اینا  کنار هم میشینن تا در نهایت ماشین رو تشکیل میده ؟ حدس و درکم درسته ؟ من همیشه به فیچراکستراکتوها تولید کننده نگاه میکنم و به fcها مونتاژ کننده مثله کشور خودمون :) درسته ؟
اگر تا به اینجا حدسم درست بوده یعنی اینکه فرضا در لایه اخر کانالوشن فیلتری یادگرفته به تایرخودرو فعال بشه یا اینکه یکی یادگیرفته به سرآدم فعال بشه - حالا فرضا من تو دیتاست خودم فرضا تایر یا سر نداشتم بلاخره این فیلترها مجبور هستند از اول یاد بگیرند یا جایگزین بشن با دیتاست مد نظر

۲- فرضا تمامی لایه ها رو قابل ترین شدن کردیم و چون دیتاستمون فرض میکنه مجبور هستیم وزنهای fc های حداقل لایه اخر رو رندم ترین کنیم این باعث نمیشه لایه های قبلی رو به هم بزنه ؟ بهتر نیست طبق گفته های اون دوستمون ابتدا چند اپاک بقیه رو فریز کنیم و اینا رو ترین کنم و بعدش همشون رو باهم ترین کنیم و از یه طرف هم احساس میکنم اینم شاید مشکل داشته باشه
سلام.
رفته رفته فیچرهای بعدی روی خروجی فیچرهای قبلی کار میکنن در این بین ما یه سلسله مراتب از ویژگی ها بدست میاریم یک فیلتر یک سری فیچر ورودی دریافت میکنه که اینها هر کدوم نسبت به یک چیزی حساسیت دارن . مثلا یک فیلتر منحصرا نسبت به وجود سر و گردن حساسیت نشون میده در مرحله بالاتر یک فیلتر دیگه بدست میاد که ورودیش این فیچر و مثلا فیچر دم و... هست و بر اساس ورودی ای که دریافت میکنه یک پترنی رو بدست میده. هیچ الزامی برای وجود لایه FC وجود نداره و اینکه ما لایه FC داریم در معماری هایی مثل الکس نت یا Vggnet و امثالهم فقط بخاطر دید سنتی سابق اونهاست. قبلا در روشهای سنتی به این شکل بود که یک پایپ لاین شامل یک بخش فیچر اکستکتور بوده و یک دسته بند یا شبکه عصبی . بعد از LeNet که مبتنی بر این طرح بود مابقی هم همین مسیر رو رفتن . تو این دیدگاه به لایه های کانولوشن صرفا بعنوان بخشی برای استخراج ویژگی مناسب از ورودی نگاه میشد و بعدش یک شبکه عصبی قرار میگرفت. بعد از 2013 این طرح تقریبا کنارگذاشته شده (هرچند هنوز بعضی ها عموما ندونسته و به تقلید از معماری های اولیه یا اینتویشن سنتی این کارو میکنن) . پس وجود لایه FC هیچ ضرورتی نداره. وقتی نداشته باشه میبینید که لایه های کانولوشن هم دارن در سطح ویژگی کار میکنن . و کلا در داخل شبکه عصبی ما با مفهوم distributed representation مواجه ایم. این یعنی وجود ویژگی های مختلف در داخل شبکه و بعد ایجاد مسیر یا ارتباط بین اون ویژگی ها برای ارائه یک مفهوم جدید توسط شبکه انجام میشه. قبلا گفتیم که یکسری ویژگی های جانبی بدست داده میشن در حین ترینینگ که از اینها برای تمایز یک شی یا کلاس نهایتا استفاده میشه. اینجا دقیقا همین ویژگی ها بکار میان. شما بعنوان مثال یک شی خاص رو ندارید که شبکه بگه این یک تایر هست یا سر یک انسان اما ویژگی های جانبی دیگه (در سطوح انتزاع مختلف) ایجاد شده و از طریق این ویژگی ها شبکه براحتی میتونه ویژگی سطح بالاتر رو بدست بده برای مفاهیم جدید.  
تنظیم وزنها بر اساس میزان تاثیراونها در پاسخ نهایی صورت میگیره به همین دلیل هم هست وقتی لایه اخر رو تماما رندوم میکنید و لایه قبلی رو فریزنمیکنید و شروع به فاین تونینگ میکنید شبکه بهم نمیریزه. درسته اگر لایه های قبلی فریز بشن یا میزان تغییرات در اونها با ضریب کم انجام بشه (نسبت به لایه جدید) همگرایی ممکنه سریعتر اتفاق بیوفته و این مطلب هم تو فاین تونینگ رایجه. اما ترین به صورتی که صحبتش رو کردیم هیچ موردی نداره و میتونه بسرعت به نتیجه خوب برسه. یعنی استارت اولیه رو میتونید اینطور بزنید به بیس  لاینی برسید بعد میتونید استراتژی های مختلف رو استفاده کنید تو مثالهای کفی در مورد فاین تونینگ در سایت فک کنم مطلب داریم و در مورد ضرایب و.. صحبت شده اونو ببینید خوبه.
خوندن مقاله https://arxiv.org/abs/1802.06205 پیشنهاد میشه. بطور خاص تو ورکشاپ سال قبل من بطور مفصل در مورد لایه FC و انتخاب های دیگه صحبت کردم اون رو هم گوش کنید یا ببینید خوبه.یا اگر نه خوندن مقالات NIN و سری مقالات Inception حداقلش پیشنهاد میشه تا دید بهتری در مورد پایپ لاینها و شیوه طراحی بدست بیارید.
+2 امتیاز

سلام
از لحاظ تفاوت بین داده ها با داده های imagenet تجربه من به این شکل است که با توجه به مقاله هایی که تا حالا خوندم و کارهایی که کرده ام(تمرکز کار من بر روی شناخت حرکت (action recognition) است که یک شبکه ان روی تصاویری اموزش داده میشود که با تصاویر رنگی rgb بسیار تفاوت دارند) این است که شروع از وزن های پیش اموزش imagenet در بیشتر موارد به بهترین جواب می انجامد. بر اساس ازمایش هایی که کردم توی کاربرد شناخت حرکت بهتر بود تنها اخرین لایه fc وزن اولیه نداشته باشه(چون تعداد کلاس ها متفاوت از imagenet است) و بقیه لایه های fc بهتر است که با وزن های پیش اموزش imagenet مقداردهی اولیه شوند.
البته اگر وزن های پیش اموزش برای دیتاستی نزدیک تر به کار شما موجود باشد مطمئنا استفاده از ان به جواب بهتر یا سریع تری همگرا خواهد شد. دلیل ان هم این است که در بسیاری از لایه ها مخصوصا لایه های کانولوشنی وزن های imagenet برای ویژگی هایی اموزش داده شده اند که در خیلی از کاربردها مفید هستند مثل استخراج لبه و گوشه ها در لایه های کانولوشنی اول.
در مورد سوال سوم باز هم استفاده از وزن های پیش اموزش imagenet به شکل گفته شده مفید تر از وزن های رندم برای پیش اموزش است. روند کلی که در چند کاربرد بینایی ماشین جواب خوبی میدهد این است که در ابتدا تنها لایه هایی رو که وزن های تصادفی (غیر از وزن های پیش اموزش imagenet) دارند را برای چند اپاک اموزش بدید تا به یک جواب اولیه هم گرا شوند بعد کل لایه ها رو با هم اموزش بدید. دلیل این کار هم این است که چون وزن های پیش اموزش imagenet نسبتا مناسب هستند ابتدا سایر لایه ها باید اموزش ببینند تا با این وزن ها به یک جواب مناسب همگرا شوند و در حین اموزش به وزن های پیش اموزش imagenet اسیبی نرسد. در نهایت با اموزش کل وزن ها با هم، جواب نهایی بهتر خواهد بود.
امیدوارم منظورم رو درست رسونده باشم.

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