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

با تشکر

دسته بندی ها

0 امتیاز

در بخشی از مطالب سایت که به مقایسه mlp و cnn پرداحته شده این مطلب بیان شده که "در شبکه mlp ورودی بردار ویژگی است چون اگر تصاویر یا داده کامل وارد شود بخاطر بالا بودن تعداد پارامترها اورفیت می کند ولی در cnn می توان به راحتی داده را مستقیم وارد کرد "و در قسمتی دیگر از سایت که به پیاده سازی ضرب ماتریسی پرداخته شده بود این نکته مطرح شده است که "ابتدا هر کدام از نواحی محلی تصویر را به ستون تبدیل می کنیم " نمی توان بین این دو مطلب به یک نتیجه برسم که بلاخره تصویر (به صورت ماتریسی )به شبکه cnn اعمال می شود یا به صورت برداری ؟
لطفا این مطلب برای بنده تشریح نمایید.
با تشکر
موفق باشید.

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

2 پاسخ

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

سلام.به این تصویر دقت‌کنید
enter image description here

اگه به تصویر نگاه کنید در اولین لایه کانولوشن چهارتا فیلتر یا کرنل با اندازه k*k روی تصویر ورودی کانوال میشن که نتیجه میشه چهارتا feature map
اما در مورد سوال بعدیتون در مورد اینکه نواحی محلی به ستون تبدیل میشن یعنی چی باید بگم که اگه کل مطلب اون قسمت رو مطالعه کنید خوب توضیح داده شده است.
ما یه تصویر ورودی داریم با اندازه مشخص و یک فیلترداریم با اندازه مشخص.برای توضیح مفهوم کانوال شدن گفته شده که با توجه ب سایز فیلتر ها ما میایم تو تصویر اصلیمون نواحی محلی متناسب با سایز فیلترها رو بصورت ماتریسی مینویسیم(اون ناحیه بصورت ماتریسه اما ما اونا رو در یک ستون مرتب میکنیم پشت سرهم با دستورات موجود)حالا اگه کل نواحی این تصویر رو بصورت چند ستون در بیاریم و کنار هم بزاریم یه ماتریس به ما میده.(با توجه به تعداد گامstride)
بعدش هرتعداد فیلتر داریم اونا رو بصورت سطری کنار هم مرتب میکنیم .بعد سطرهارو کنار هم میزاریم و یه ماتریس دیگه داریم(ماتریسی که تعداد سطرهاش برابر تعداد فیلترهاست)
الان ما دوتا ماتریس داریم که باید در هم کانوال یا ضرب مولفه ب مولفه بشن.همونطور که میدونید برای ضرب دوماتریس باید بعد دوم ماتریس اول با بعد اول ماتریس دوم برابر باشه(یعنی تعداد ستون ماتریس اول برابر تعداد سطرهای ماتریس دوم باشه).حالا هرسطر از ماتریس اول در یک ستون از ماتریس دوم ضرب و جمع میشه و درایه ای از ماتریس جدید بدست میاد اگه همینطور ادامه بدیم سطرهای ماتریس اول در ستونای ماتریس دوم ضرب و سپس حاصضربها جمع بشن کل درایه های ماتریس جدید بدست میاد.
اگه مثال اون قسمت رو مجدد مطالعه کنید فک کنم موضوع براتون روشن میشه.
....
تصویر بالا:(مفهوم کانوال شدن فیلترها بر روی تصویر ورودی و بدست اومدن چندتا feature map )

توسط (279 امتیاز)
انتخاب شده توسط
سلام
خیلی ممنون ،لطف کردید
موفق باشید
خواهش میکنم.موفق باشید
+1 امتیاز

سلام.
لطفا تو متن سوال لینک به صفحات حاوی مطالبی که مطرح کردید بدید .
در مورد mlp همه چیز در قابل یک بردار به شبکه ارائه میشه. شما میتونید یک تصویر رو کامل به شبکه بدید چیزی جلوی شما رو نمیگیره اما قطعا این قضیه کارایی مناسب رو برای شما به همراه نداره برای همین برای جلوگیری از مشکلات اینچنینی سعی بر این بود که ابتدا یک پیش پردازشی انجام شده و بجای تصویر ، برداری از ویژگی های مناسب کار به شبکه ارائه بشه.
در شبکه های کانولوشن هم شما میتونید قبل از اینکه تصویر رو به ورودی بدید خودتون هم کارهایی رو تصویر انجام بدید تا کارایی شما بهتر بشه. هرچند مثل Mlp نیاز اساسی ای وجود نداره و بخاطر ماهیت شبکه کانولوشن مهندسی ویژگی بصورت خودکار انجام مبشه و نتایج خوبی دریافت میکنید اما میتونید مثلا با کمک یک autoencoder به یک representation مناسب از تصویر ورودی برسید و اون رو به شبکه بدید و ادامه کار.
در مورد مطلبی که آخر گفتید اون مساله در مورد شیوه پیاده سازی بهینه فاز forward pass هست . برای اینکه بشه عملیات رو بصورت موازی و با سرعت و بهینگی هرچه تمام تر انجام داد از تکنیکی بنام Im2col استفاده میکنن(روشها و تکنیک های دیگه هم برای انجام اینطور عملیاتها وجود داره) که همه عملیات ها بصورت برداری با سرعت بالا توسط کارت گرافیک انجام بشه. اگر این کارو نکنن و بصورت برداری (vectorized) انجام ندن باید با حلقه های for معمولی بصورت سریال (پشت سر هم ) پیکسل به پیکسل و...خروجی ها رو محاسبه کنن که خیلی زمان بر هست.
دقت کنید که برداری یعنی هر چیزی که در قالب بردار ارائه شده باشه . مثلا تو mlp شما میتونید کل تصویرتون رو در قالب یک بردار به شبکه ارائه کنید . همینطور میتونید بیایید یه مهندسی ویژگی انجام بدید و نتایج اون رو در قالب یک بردار ، (بنام بردار ویژگی!) به شبکه اتون بدید. بحث پیاده سازی برداری یا vectorized implementation ربطی به بردار ویژگی و مهندسی ویژگی و.... نداره صرفا اشاره به برداری کردن یک محاسبات داره .
مثلا شما فرض کنید یک معادله دارید بصورت

y = -40 + 5x

حالا فک کنید این معادله شما در اصل فرضیه شما برای حساب کردن(پیش بینی) قیمت منازل هست ! مقادیر x هم دارید که 100 هزار تایی میشن و فرض کنید زیر بنای خونه ها هستن. حالا شما بخوایید قیمت این 100 هزار آیتمی که دارید رو حساب کنید .
راه معمولیش اینه که از حلقه for استفاده کنید!
یک راه دیگه پیاده سازی برداری این معادله هست تا در یک لحظه برای همه ایتم ها محاسبه انجام بشه .
مثلا فرض کنید برای زیر بنای خونه این 4 تا مقدار رو داریم

250
350
100
75

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

1   250
1   350
1   100
1    75

یک ماتریس 4x2 شد .
حالا برای معادله بردارم میشه

-40  5 

که ترانهاده اش کنیم میشه

-40
5

که یه ماتریس2x1 شده
حالا براحتی میشه یک ماتریس 4x2 رو در یک ماتریس 2x1 (بردار ترانهاده شده ) ضرب کرد . و همه درایه ها بصورت موازی در یک آن انجام میشن.

توسط (4.3k امتیاز)
سلام
خیلی ممنون ،لطف کردید
موفق باشید
...