Batch Normalization و Learning Rate Decay

 

Batch Normalization

 

Batch Normalization را می توان تکنیکی برای بهبود عملکرد و پایداری شبکه های عصبی دانست.

ایده این کار نرمال سازی ورودی هر لایه با کمک میانگین و واریانس می باشد. به شکلی که میانگین اعداد بردار نهایی برابر با صفر و واریانس آن ها برابر با یک شود.

 

 

 

ادامه خواندن Batch Normalization و Learning Rate Decay

بررسی مقدماتی شبکه های کانولوشنالی


یکی از وظایف پایه در مبحث بینایی ماشین Image Classification می باشد. در ادامه با چالش های عکس در این زمینه آشنا می شوید.

Semantic gap : همان گسستگی میان پیکسل ها که حاوی این نکته است که ما فقفط بخشی از تصویر واقعی را در اختیار داریم.

viewpoint variation : یکی دیگر از چالش ها، اختلاف بین زاویه های مختلف یک شیء می باشد.

Illumination : نورپردازی های مختف کار تشخیص شیء را دچار چالش می کند.

Deformation : حالت های مختلف یک شیء و تغییر حالت آن از دیگر مشکلات این فیلد می باشد.

Occlusion : ناقص بودن یک شیء ممکن است مدل را برای تشخیص دچار مشکل کند.

Background clutter : هم شکلی با محیط کار تشخیص شیء از محیط را دشوار تر می کند.

Intraclass variation : تنوع یک دسته شیء هم از دیگر چالش های این حوزه محسوب می شود.

یکی از مشکلات تشخیص شیء عدم وجود هیچ الگوریتم مشخصی برای شناسایی شکل است، این فرآیند از همچین الگویی ثابت پیروی نمی کند.

 

محوریت ساخت مدل:

  • Collect a dataset of images and labels (جمع آوری عکس ها و لیبل ها)
  • Use Machine Learning to train an image classifier (آموزش مدل)
  • Evaluate the classifier on a withheld set of test images (ارزیابی مدل)

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

طبقه بند چند لایه softmax

 

تعیین تابع هزینه و روش بهینه سازی

 

تعیین داده‌های آموزشی، سایز mini-batch و تعداد epoch

 

نکته : مدل ساخته شده بعد از مدتی (چندبار دیدن عکس ها) شروع به حفظ دیتاست و ساخت توابع پیچیده میکند که باعث ایجاد مشکلی به نام overfitting می شود.


شبکه های کانولوشنی

تا قبل از سال 2012 تصور بر این بود که تعداد لایه های درونی را نباید بیش از 2 تا نشود که میزان خطا بالاتر تر نرود این بدلیل استفاده از تابع activation ناکارآمد sigmoid بود که با معرفی و استفاده از تابع ReLu و بالاتر رفتن تعداد لایه ها میزان خطا کمتر شد.

ایده ایجاد شبکه های کانولوشنی

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

Padding

لبه ها به اندازه پیکسل های درونی در کانولوشن شرکت نمی کنند درنتیجه خروجی کوچک می شود ( اگر تعداد لایه های کانولوشنی زیاد باشد حجم زیادی از دیتا از بین میرود )

با اضافه کردن مقادیری در اطراف عکس ورودی سعی در شرکت بیشتر لبه ها در این عمل داریم که به آن padding می گویند.

اگر در اطراف عکس مقدار 0 گذاشته شود zero-padding انجام داده ایم.

 

انواع کانولوشن

Valid : اگر از سایز ورودی با سایز خروجی برابر نباشد در حقیقت کانولوشن valid انجام داده ایم (اگر ورودی n*n و سایز فیلتر f*f باشد خروجی (n-f+1)*( n-f+1) می شود

Same : اگر به مقداری padding بدهیم که سایز ورودی با سایز خروجی یکی شود کاولوشن same خواهد بود) اگر ورودی n*n و سایز فیلتر f*f باشد و به اندازه p واحد padding بدهیم خروجی (n+2p-f+1)*( n+2p-f+1)  یا همان n*n می شود.

* نکته: برای اینکه کانولوشن same شود باید به اندازه 2/(f-1) به عکس ورودی padding بدهیم

* نکته: سایز فیلتر باید فرد در فرد باشد

Stride : مقدار جابجایی فیلتر به صورت افقی (چندتا چندتا جلو بره)

نکته : اگر ورودی n*n و سایز فیلتر f*f باشد و به اندازه p واحد padding بدهیم و stride s داشته باشیم خروجی

[( n+2p-f)/s+1]*[( n+2p-f)/s+1]   می شود(اگر عدد رند نشد به سمت پایین گرد میکنیم)

parameter : پارامتری که در فرایند training مشخص می شود و تابع cost بر اساس آن بهینه می شود ( مانند وزن های شبکه)

Hyper parameter : پارامتری که با فرآیند training بدست نمی آید ( مانند k در k nearest neighbor، مقدار stride)

 

کانولوشن چند بعدی

در این نوع کانولوشن باید بعد هم عمق با ورودی باشد یعنی اگر ورودی 6*6*3(یک عکس RGB 6*6) باشد، فیلتر میتواند 3*3*3 باشد.

 

 

* نکته: در این مثال از یک فیلتر استفاده کردیم پس بعد سوم خروجی 1 است یعنی خروجی 1*4*4 است (بعد خروجی = تعداد فیلتر استفاده شده)

* نکته: مقادیر مرکزی کانولوشن هر بعد با هم جمع می شود و bias نیز به آن اضافه می شود

** مثال: با 10 فیلتر 3*3*3 تعداد پارامتر آن لایه چقدر می شود؟   ((3*3*3)+1)*10 = 280

 

** مثال:


در شبکه های عصبی کانولوشنالی از لایه های conv  و pool  به شکل زیر استفاده میکنیم :

همان طور که مشاهده می کنید قبل از اولین لایه Dense یا fully connected همیشه از متد flatten استفاده میشود تا نرون ها به صورت یک وکتور در بیایند.

در لایه آخر نیز اگر خروجی مدل ما باینری باشد میتوان از activation=sigmoidاستفاده کرد اما اگر خروجی مدل چند حالت مختلف باشد مثل مدل بالا که برای هدی هست و 10 تا خروجی دارد از softmax استفاده شده.

به ورودی و خروجی هر لایه نیز تنسور گفته می شود.

تصاویر مجموعه داده هدی در تابعی که قبلا نوشته ایم، load_hoda به صورت flat شده و یک وکتور در آمده اند.
در این فراخوانی طول و عرض تصاویر 28 قرار داده شده است، پس خروجی این تابع وکتورهای 784 تایی است.
دقت کنید که قبل از ورودی شبکه کانولوشنالی تصویر را به شکل اصلی خود یعنی 28×28 برگردانده ایم.
همچنین چون تصاویر سیاه و سفید است تعداد کانال تصویر را 1 قرار داده ایم.

 

با دستور ()model.summary ورودی و خروجی هر لایه را میبینیم :

همانطور که مشاهده میکنید با هر بار conv گرفتن پارامتر های جدیدی به دست می آید که میتوانند با تابع cost بهینه شوند.

لایه dropout هم هر بار تعدادی از نرون ها را میکشد برای جلوگیری از پدیده overfitting .

و با هر بار pooling همان طور که مشاهده میکنید پارامتری برای آموزش نمی دهد و تنها دو هایپر پارامتر s و f دارد و تنها ابعاد داده را کوچکتر میکند با ازبین بردن برخی جزییات از طرق ماکسیمم گیری،میانگین گیری و ….

استفاده از مدل Train شده با Keras در پلتفرم های مختلف

سلام به دوستان عزیز، این آموزش تلاشی برای کاربردی کردن تمارین و مدل های ارائه شده در کلاس تحت پلتفرم های مختلف می باشد. در ادامه روند اجرای مدل تحت وب را با هم میبینیم و سپس شما هم با کمی تغییر در این پروسه می توانید یادگیری عمیق را به پلتفرم خودتان ببرید!

برای شروع، نیاز به ذخیره کردن مدل بعد از عملیات های compile و train می باشد، شما می توانید با استفاده از دستورات زیر به راحتی این کار را انجام دهید و یک فایل خروجی از مدل خود داشته باشید و یا از آن در برنامه ای دیگر استفاده کنید!

 

در مرحله بعد کافیست کمی در اینترنت جستجو کنید و کتابخانه مربوط به زبان برنامه نویسی خود و فریمورک کراس را بیابید، در ادامه ما از کتابخانه Keras.js استفاده خواهیم کرد.

آخرین لحظات در پایتون

لینک دانلود کتابخانه کراس جی اس در اینجا

با اجرای دستور زیر در پوشه python کتابخانه، فایل خروجی خود را برای مدل جاوا اسکریپتی بهینه کنید.

جریان اجرایی پروژه

در مرحله اول، نیاز به رسم اعداد و دستخط افراد وجود دارد، اینکار به راحتی با قابلیت canvas در html صورت می پذیرد (توضیحات بیشتر در اینجا)

توابع رسم اعداد

 

توابع گرفتن خروجی عکس و ارسال آن به سرور

اما تصویر ارسال شده به سرور نیاز به کمی تغییرات در سایز (متناسب با مدل) و همچنین برش آن ها دارد. شما در ادامه تابع برش تصویر را میبینید.

در نهایت بعد از انجام عملیات های Preprocessing، حال نوبت به استفاده از کتابخانه کراس جی اس است.

همانطور که ملاحضه کردید این سری عملیات ها قابلیت تکرار به کمک زبان های برنامه نویسی مختلف و پلتفرم های مختلف را داراست.


منابع

KerasKeras.jsCanvasImageResizePhp

نصب کتابخانه Keras بر پایه ی کتابخانه TensorFlow

سلام به همگی دوستان، سعی میکنم خیلی کوتاه و مختصر توضیح بدم تا وقت بیهوده برای خوندن مطلب از دست ندید.

اول از همه، برای یادآوری باید بگم که طبق تیتر مطلب، کتابخانه Keras (زین پس کراس) بر پایه ی کتابخانه های مختلفی نوشته شده که به دلیل تازه تر بودن، قوی تر بودن و همگانی تر شدن کتابخانه TensorFlow (زین پس تنسرفلو) ما قصد نصب برپایه این کتابخانه را داریم.

* برای شروع حتما نسخه 64 بیتی پایتون های 3.6 و یا 3.5 را نصب کنید. (آیا پایتون من 64 بیتی است؟)


نصب مبتنی بر CPU : 

نصب تنسرفلو به کمک Pip :

نصب تنسرفلو  به کمک Conda :

 

* مشکل در نصب : اگر با دستورات فوق موفق به نصب نشدید به این لینک رجوع کنید.

آیا تنسرفلوی من نصب شده است؟ برای اطمینان این کد را اجرا و از نصب درست کتابخانه مطمئن شوید.

نصب ابزار های مورد نیاز :

و در نهایت نصب کراس به کمک Pip :

نصب کراس به کمک Conda :

آیا کراس من نصب شده است؟ برای اطمینان این کد را اجرا و از نصب درست کتابخانه مطمئن شوید.

In :

Out :

 

 


نصب مبتنی بر GPU : 

برای اینکه بتونیم محاسبات رو با کارت گرافیک خودمون انجام بدیم نیاز به کارت گرافیک NVIDIA هست که در ادامه متوجه خواهید شد آیا شما می توانید از این روش استفاده کنید یا خیر!

 

نصب ابزار CUDA (پیش نیاز) :

کودا یک مدل برنامه نویسی و یک پلتفرم برای انجام محاسبات موازی می باشد.

برای شروع با طی کردن این مسیر از مدل کارت گرافیک خود آگاه بشوید :

Windows + R > control /name Microsoft.DeviceManager >  Display Adapters

سپس در این لیست جست و جو کنید، اگر نام سری و شماره پردازنده خود را یافتید شما قادر به استفاده از CUDA هستید!

سپس حتما نسخه 9.0 را دانلود و نصب نمایید و آدرس آن را در %PATH% قرار دهید. (لینک)

* مشکل در نصب : به این لینک مراجعه کنید.

نصب ابزار cuDNN (پیش نیاز) :

حتما نسخه 7.0 را دانلود و نصب نمایید و آدرس آن را در %PATH% قرار دهید. (لینک)

* توجه : حتما نسخه ذکر شده را نصب کنید و از وجود فایل cuDNN64_7.dll مطمئن شوید!

* مشکل در نصب : به این لینک مراجعه کنید.

نصب تنسرفلو به کمک Pip :

نصب تنسرفلو  به کمک Conda :

ما بقی مراحل همانند قسمت نصب با CPU می باشد. لطفا مشکلات و راه حل های خود را در گروه مطرح کنید تا به تکمیل تر شدن این پست کمک کنیم.

به زودی تکمیل می شود ..


محیط مجازی (virtualenv) : 

به طور خلاصه، برای جدا و ایزوله سازی وابستگی های یک پروژه از سایر پروژه ها از این قابلیت استفاده می شود. در ادامه به کمک این امکان، یک ورژن خاص از پایتون را بر روی محیط مجازی خودمون نصب می کنیم. (راه حلی برای نصب تنسرفلو از طریق کوندا بر روی پایتون 3.5 در حین داشتن ورژن 3.6)

* توجه : قبل از این عملیات ها، ورژن پایتون مورد استفاده خود را نصب نمایید.

نصب ابزار virtualenv :

ایجاد محیط جدید :

فعال کردن محیط در لینوکس :

 

فعال کردن محیط در ویندوز :

 

تبریک! حالا شما می تونید پکیج های مورد نظر خودتون رو در محیط ایجاد شده بدون ایجاد هیچگونه اختلالی در محیط های دیگر نصب نمایید.

برای deactive کردن، حذف و سایر اطلاعات مربوطه به این منبع مراجعه کنید.


  محیط مجازی در کوندا (virtualenv) : 

ایجاد محیط جدید :

فعال کردن محیط در لینوکس :

فعال کردن محیط در ویندوز :

حال می توانید پکیج های خود را بر روی محیط جدید نصب کنید.

نصب مستقیم پکیج در هنگام ساخت محیط جدید (راه دوم)

نصب ادیتور مخصوص محیط جدید

حال شما ادیتور لازم در کوندا و برای محیط جدید خودتون رو ایجاد و باز کرده اید

* توجه : در صورت عدم دسترسی cmd را در مود administrator باز کنید.

برای deactive کردن، حذف و سایر اطلاعات مربوطه به این منبع مراجعه کنید.

 


لینک منبع تنسرفلو : https://www.tensorflow.org/install/#pip_installation_on_windows

لینک منبع کراس : https://www.pyimagesearch.com/2016/11/14/installing-keras-with-tensorflow-backend/