دانشنامه تخصصی مهندسی ایران

دانشنامه تخصصی مهندسی ایران

 engpedia   راه اندازی کانال تلگرام ( EngPedia_ir@ )

                همراه با مطالب ویژه سایت بصورت رایگان

  • نسخه ۱۲.۱ نرم افزار Aveva Marine در سایت قرار گرفت. (اینجا)
  • نسخه ۱۰.۵۲ نرم افزار Plus 2D در سایت قرار گرفت. (اینجا)
  • نسخه ۱۱.۰ نرم افزار AGI Systems Tool Kit-STK در سایت قرار گرفت.(اینجا)

همکاران

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

مدیریت مرداد ۲۷, ۱۳۹۲ 22166 بازدید ۴۱دیدگاه

به طور کلی در نرم‌ افزار MATLAB به ۳ روش می‌ توان شبکه‌های عصبی ایجاد کرد:

 

  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 مقدار [۱ ۰ ۱ ۰;۱ ۱ ۰ ۰] و در Data Type حالت Inputs را انتخاب کرده و به روی Create کلیک کنید دیالوگی مبنی بر ذخیره دیتا مشاهده می‌‌کنید آن را Ok کنید سپس برای ذخیره‌ی داده‌های تارگت مشابه حالت قبل عمل کنید یعنی در قسمت Name نام t و در قسمت Value مقدار [۰ ۱ ۱ ۱] و در 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 بروید همانطور که ملاحظه می‌کنید در اینجا می‌توانید پارامترهای زیادی را تغییر دهید مثلا ممکن است در مساله‌ای خاص، پرفورمانسی برابر ۰.۰۰۱ کافی باشد که می‌توانید در قسمت 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

 

 

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

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

 

 


 
 

 

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

 

نظرات شما باعث دلگرمی و پیشرفت ما می شود.

telegram: @EngPedia_ir

41 پاسخ به “شبکه های عصبی در MATLAB”

  1. Amar گفت:

    با سلام
    چطوری میشه تعداد ورودی ها و خروجی ها رو به صورت دلخواه تنظیم کرد؟ الان شما فقط دو تا ورودی بهش دادین. من مثلا میخام یک پرسپترون چند لایه با ۹ ورودی، ۲ خروجی و ۲ لایه پنهان که لایه پنهان اول ۸ نرون و لایه پنهان دوم ۲ نرون داشته باشه استفاده کنم
    ۹-۸-۲-۲
    ممنون میشم راهنمایی کنید

  2. Amar گفت:

    سلام
    با تشکر از پاسخ شما
    متاسفانه لینک مورد نظر در دسترس نمی باشد

  3. uzdl گفت:

    سلام
    آقا چیکار کنیم که تحریم هستیم و نمیشه اسایت MAthwork عضو شد و استفاده کرد 🙁

  4. hossein behzadi گفت:

    salam,projhe man rajebe pishbini nasht khate lole nafte ba estefade az shabakehaye asabi,mikham bedonam vaghean data az koja peida konam k shabake asabio parvaresh va test konam?mamnon misham javabo vasam email ham konid mersi

  5. fariba گفت:

    با سلام
    لیطنک مربوط به پرسپترون چندلایه توسط فیلترشکن هم باز نمیشه
    لطفا اگر امکانش هست مطالب مربوطه را به ایمیل من ارسال کنید
    با تشکر

  6. fariba گفت:

    با سلام
    میشه لطفا مسیر شبکه عصبی پرسپترون چندلایه در متلب را بگین من در سایتهای مختلف مسیر nftool هم دیدم میشه این کار را انجام داد

  7. fariba گفت:

    مثال
    من با متلب زیاد کار نکردم خصوصا کدنویسی اصلا چیزی نمیدونم
    پایان نامه من ۱۸ متغیر مستقل و ۲ متغیر وابسته است که با اتفاده از شبکه پرسپترون چندلایه باید بین مقادیر واقعی و پیش بینی متغیر وابسته رابطه برقرار شود و حساسیت دو متغیر وابسته نسبت به متغیرهای مستقل نیز با استفاده از آنالیز حساسیت انجام شود، حالا نمیدونم چططور این مسئله رو حل کنم
    خواهشمندم راهنماییم کنید
    با تشکر

  8. fariba گفت:

    سلام ببخشید شاید داده های نرمال بتوانند کمک کنند
    دو Y برای دو مدل شبکه با ۱۸ متغیر مستقل برای هر شبکه به ایمیل شما ارسال می شود
    تشکر

  9. saeede گفت:

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

  10. امیر حسین گفت:

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

  11. تینا گفت:

    سلام
    پروژه من کنترل دور موتور القایی با شبکه عصبی ست. من ابتدا موتور القایی را در سیمولینک پیاده کردم و بعد سرعت را با روش برداری غیر مسقیم کنترل کردم حالا باید به جای کنترلر حالت قبل از شبکه عصب استفاده کنم ابتدا ازبلوک های اماده سیمولینک استفاده کردم ولی فک کنم نحوه ی train کردنش مشکل داره تعداد لایه ها ونرون ها را دارم ولی کبا کدنویسی اشنا نیستم ونمی تونم با روش کد شبکه عصبی را تولید کنم.. اگه میشه با یکی از این راه ها منو راهنمایی کنید.

  12. m.p گفت:

    با سلام خدمت شما
    من نیاز شدید و ضروری به “کد آنالیز حساسیت شبکه عصبی در متلب” دارم.
    اگه امکانش هست ممنون میشم کمکم کنید
    با سپاس فراوان از زحمات شما

  13. na گفت:

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

  14. سارا گفت:

    سلام نرمالیزه کردن داده ها براساس یه تابع مثل تابع هزینه در الگوریتم استعماری چطوریه؟

  15. m.a گفت:

    با سلام .
    پروژه من ۱۱ داده ورودی و یک خروجی داره.میخوام آنالیز حساسیت آنجام بدم و ببینم شبکه پرسپترون چند لایه با کدوم ورودی ها جواب بهتری می ده. مراحل انجام رو اگه برام بفرستید ممنون میشم.

  16. zahra گفت:

    سلام.پایان نامه من پیش بینی بیماران کلیوی با پرسترون هستش.دیتاست من ۲۵ تا attribut و ۴۰۰ تا نمونه داره.الان باید چیکار کنم؟ هیچی راجع ب شبکه عصبی نمیدونم.اگه میشه کمکم کنین ممنون

  17. sara گفت:

    سلام پروژه من در مورد تشخیص حالت چهره هستش می خواستم ببینم می تونم با همین روش های گرافیکی و gui انجامش بدم یا باید با کد نویسی کار کنم حتما؟
    ممنون

  18. هادی گفت:

    با سلام و احترام
    شرمنده من آموزش رو میدونم الان ۷۰ به ۳۰ واسه آموزش و تست داده ها رو جدا کردم
    تست شبکه چه جوریه؟ ممنونم

  19. nikta گفت:

    salam khaste nbashid man az tolbax shabke asabi nnfitting estfade kardam v javab geftam faghat khoroji khode shabke asabi nmitonam bebinam lotfan rahnmae bfrmaed mamnoon

  20. kian گفت:

    من میخوام با یادگیری عمیق روی یک دیتاست مشخص، رفتار بعدی کاربرا تو یک شبکه اجتماعی کوچک رو پیش بینی کنم. میتونید راهنمایی کنید؟

  21. mirzaei گفت:

    سلام خدا قوت به شما عزیزان
    میخواستم ببینم در مورد تشخیص fault پروژه ای خدمتتون نیس ؟
    هر سیستمی باشه پزشکی یا مهندسی برق . فقط مهم اینه ک تشخیص fault رو انجام بده داخلش .

پاسخ دهید

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