شبكه های عصبی در MATLAB

35405 بازدید

به طور كلی در نرم‌ افزار MATLAB به 3 روش می‌ توان شبكه‌ های عصبی Neural Network ایجاد كرد:

  1. كدنویسی
  2. استفاده از سیستم‌های بلوكی (Simulink)
  3. استفاده از محیط گرافیكی (GUI)

در این مقاله قصد دارم نحوه‌ی استفاده از GUI در جعبه‌ابزار شبكه عصبی را به دوستان معرفی كنم البته به دوستان توصیه می‌كنم كه ابتدا با كدنویسی آشنا شوند زیرا ممكن است درجایی مجبور به نوشتن كد باشند مگر كسانی كه شبكه عصبی، درس تخصصی آنها نبوده و فقط برای انجام قسمتی از پروژه‌شان می‌خواهند از شبكه‌های عصبی استفاده كنند كه استفاده از GUI در این مورد بسیار ساده و سریع است.

برای شروع nntool را در خط فرمان تایپ و اینتر كنید و یا از مسیر Start >> Toolboxes >> Neural Network >> Neural Network Tool استفاده كنید پنجره‌ای مانند شكل زیر مشاهده می‌كنید:

برای ایجاد یك شبكه جدید، روی دگمه New كلیك كنید همان‌طور كه مشاهده می‌شود، ‌پنجره‌ای باز می‌شود كه می‌توانید در آن پارامترهای شبكه‌ی مورد نظرتان را وارد كنید:

 

در تب Network شما می‌توانید تنظیمات مربوط به شبكه عصبی مورد نظرتان را وارد كنید و در زبانه دوم یعنی Data شما داده‌های خود را وارد می‌كنید. حالا برای مثال اول می‌خواهیم با یك تك پرسپترون، گیت NAND دو ورودی را پیاده‌سازی كنیم ابتدا نام شبكه مورد نظر را در قسمت Name وارد كنید من نام NAND را وارد می‌كنم سپس در قسمت Network Type نوع شبكه را Perceptron انتخاب كنید پس از آن به تب Data رفته و در قسمت Name نام p و در قسمت Value مقدار [1 0 1 0;1 1 0 0] و در Data Type حالت Inputs را انتخاب كرده و به روی Create كلیك كنید دیالوگی مبنی بر ذخیره دیتا مشاهده می‌‌كنید آن را Ok كنید سپس برای ذخیره‌ی داده‌های تارگت مشابه حالت قبل عمل كنید یعنی در قسمت Name نام t و در قسمت Value مقدار [0 1 1 1] و در Data Type حالت Targets را انتخاب كرده و به روی Create كلیك كنید دیالوگ مشاهده شده را Ok كنید. به تب Network بازگشته و داده‌های ورودی و تارگت را از منوی مقابلشان انتخاب كنید برای دیدن ساختار شبكه، بر دگمه View كلیك كنید بصورت زیر:


 

همان‌طور كه می‌بینید از تابع محدود كننده سخت نامتقارن استفاده كرده‌ایم تا خروجی‌های ما صفر یا یك شوند حالا برای ایجاد شبكه، Create را كلیك، و دیالوگ پس از آن را Ok كنید به پنجره اصلی بازگشته و در قسمت Networks به روی NAND كلیك كرده و Open را بزنید در پنجره باز شده به تب Train رفته و مقادیر ورودی و تارگت را وارد كرده و برای شروع آموزش Train Network را بفشارید همان‌طور كه مشاهده می‌كنید به پرفورمانس صفر رسیده‌ایم(اتفاقی كه در هیچكدام از مسائل واقعی كه ما با آن سروكار داریم، هرگز رخ نخواهد داد!) كه دلیلش را هم احتمالا می‌دانید حال به پنجره اصلی بازگشته و مقادیر خروجی و خطا را به ازای داده‌های آموزشی مشاهده كنید كه البته از پرفورمانس صفر می‌توان حدس زد كه چه مقادیری به دست آمده است.

اكنون اگر بوسیله‌ی همین روش تابع XOR را پیاده‌سازی كنید نتایج وحشتناكی خواهید گرفت.

برای مثال دوم می‌خواهیم تابع سینوس را بوسیله‌ی یك شبكه عصبی MLP ، تقریب بزنیم برای این منظور در پنجره مدیریت شبكه و دیتا، New را كلیك  كرده و مانند شكل زیر عمل  كنید:


 

شبكه را دو لایه قرار داده‌ایم كه در لایه اول ده نرون با تابع تبدیل تانژانت سیگموئید و لایه دوم كه همان لایه خروجی است را تابع تبدیل خطی داده‌ایم (نرون‌های لایه خروجی برابر تعداد خروجی‌های شبكه می‌باشد كه در این مثال برابر یك است.)

در اینجا دیگر نمی‌ توانید از روش قبل برای ایجاد داده‌های خود استفاده كنید و باید دیتا را یا از یك فایل mat بگیرید و یا از فضای كاری متلب. دستورات زیر را در خط فرمان تایپ و اینتر كنید:

;p=0:0.1:4*pi

;(t=sin(p

به پنجره‌ی اصلی بازگشته و Import را كلیك كنید سپس داده‌های p و t را به ترتیب عنوان داده‌های ورودی و تارگت، Import كرده و سپس Close كنید.

حال به پنجره‌ی تنظیمات بازگشته و داده‌های ورودی و تارگت را وارد كرده و شبكه را ایجاد كنید. شبكه‌ای را كه با نام Sin ذخیره كرده‌اید، باز كنید و به تب Train بروید و پس از وارد كردن داده‌های ورودی و تارگت، به تب Training Parameters بروید همانطور كه ملاحظه می‌كنید در اینجا می‌توانید پارامترهای زیادی را تغییر دهید مثلا ممكن است در مساله‌ای خاص، پرفورمانسی برابر 0.001 كافی باشد كه می‌توانید در قسمت goal آن عدد را وارد كنید و نیز تنظیمات دیگری از جمله زمان، تعداد مراحل آموزش و غیره. 


   مقادیر را پیش‌فرض قرار داده و شبكه را آموزش دهید:

 


 
 اگر به مقادیری غیر از آنچه در بالا آمده، رسیده‌اید، تعجب نكنید.

در تب View/Edit Weights می‌توانید تمام وزن‌ها و بایاس‌ها را مشاهده كنید به پنجره‌ی اصلی بازگردید و Export را كلیك كرده و شبكه و نیز داده‌های خروجی و خطا را به فضای كاری متلب انتقال دهید و كدهای زیر را اجرا كنید:

(subplot(2,1,1

;(y1=sim(Sin,p

(‘plot(p,t,p,y1,’m

;([xlim([0 4*pi]);ylim([-1 1

;(‘(title(‘Network Output (Training Data

(subplot(2,1,2

;x=0:0.001:4*pi

;(y2=sim(Sin,x

(‘plot(x,sin(x),x,y2,’m

;([xlim([0 4*pi]);ylim([-1 1

;(‘(title(‘Network Output (Test Data

 

همان‌طوری كه مشاهده می‌شود شبكه با ده نرون به خوبی آموزش دیده و برای داده‌های تست نیز خروجی مناسبی داریم.

(توجه كنید كه در شكل، منحنی‌های خروجی و تارگت روی هم افتاده‌اند)

 


نكته: توجه كنید كه تابع سینوس یكی از ساده‌ترین توابع است و آن را می‌توانید با تعداد نرون‌های كمتری (حتی دو سه نرون) با تقریب نسبتا خوبی پیاده‌سازی كنید. درواقع بسته به خودتان است كه چه میزان دقت مورد نیاز شماست. یكی از توابع سخت برای پیاده‌سازی، تابع مربعی می‌باشد كه دلیل آن تغییرات شدید در لبه‌های بالارونده و پائین‌رونده‌ی آن است به عبارتی دیگر اگر شما می‌خواهید دو تابع سینوسی و مربعی را با دقت یكسانی تقریب بزنید، شما مجبور هستید تا شبكه‌ی بزرگتری را برای تابع مربعی درنظر بگیرید این تابع را خودتان پیاده‌سازی كنید تا درك بهتری از شبكه عصبی داشته باشید.

تماس با ما Contact us

مطالب مرتبط

دیدگاهتان را بنویسید

بخش های مورد نیاز علامت گذاری شده اند

نشانی ایمیل منتشر نخواهد شد

نویسنده : آدرس سایت : ایمیل :
کد روبرو را وارد نمایید
captcha


0

شبکه های اجتماعی

دانشنامه تخصصی مهندسی ایران را در شبکه های اجتماعی دنبال کنید

0 0
درخواست نرم افزار
در صورتی که نیاز به مشاوره در مورد اطلاعات و اخبار نرم افزارها دارید، با ما تماس بگیرید.
    همکاران ما در سریع ترین زمان ممکن پاسخگو شما خواهند بود.