یکی از روشهای نوین و پرکاربرد در زمینه یادگیری ماشین و هوش مصنوعی شبکههای عصبی میباشد. این روش که بعد از فراز و نشیبهایی در تاریخچهاش امروزه به مقبولیت قابل ملاحظهای بین محققین رسیده است برگرفته از ساختار عصبی مغز انسان میباشد. هر شبکه عصبی از لایههای مختلفی تشکیل شده است که این لایهها از اجزای کوچکتری به نام نورون بوجود آمده اند.
بسم الله الرحمن الرحیم
امروزه در بستههای نرم افزاری (مانند متلب و پایتون) که برای محاسبات علمی طراحی شده اند، کتابخانههایی برای بکارگیری شبکههای عصبی طراحی و گنجانده شده اند. با این حال در بسیاری از کاربردها، مانند استفاده شبکههای عصبی در سیستمهای embedded و یا کاربردهایی که سرعت پردازش بالایی مد نظر است از زبانهای برنامهنویسی سطح میانی ماند سی پلاس پلاس استفاده میشود. لذا در دست داشتن و تسلط بر ابزارهای پیاده سازی شبکههای عصبی در این زبانها نیز دارای کاربردهای خاص خود میباشد. در این پست به معرفی کتابخانه++NN پرداخته میشود.
در حال حاضر این کتابخانه صرفا از شبکه عصبی پرسپترون چند لایه با روش یادگیری backpropagation پشتیبانی مینماید. در کنار خود دارای یک کتابخانه برای کار بار ماتریسها هم دارد لذا لازم نیست اقدام به نصب بستههای دیگر کنیم. کلاس NeuralNet که برای تعریف یک شبکه عصبی بکار میرود دارای پنج متغیر بترتیب زیر میباشد:
- تعداد گرههای ورودی
- تعداد گرهها به ازای هر لایه مخفی
- تعداد گرههای لایه خروجی
- تعداد لایههای مخفی
- ضریب یادگیری
گفتنی است ضرایب اولیه شبکه عصبی در این کتابخانه بصورت تصادفی با توزیع نورمال حول صفر مقدار دهی میشوند.هر چرخه یادگیری در این کتابخانه با استفاده از تابع trainingCycle از کلاس NeuralNet انجام میگیرد که دارای دو ورودی از نوع ماتریس میباشد. (نوع ماتریس باید با کتابخانهای که ضمیمه این بسته میباشد تعریف گردد.) ماتریس اول دربردارنده دادههای یادگیری و ماتریس دوم دربردارنده خروجیهای هدف میباشند. تا یادگیری کامل برای تمام دادههای آموزش این فراخوانی این تابع انجام گیرد. برای محاسبه دادههای تست نیز از تابع queryNet که در کلاس شبکه عصبی تعبیه شده استفاده میشود. ورودی این تابع نیز دارای یک ورودی به شکل ماتریسی از دادههای تست است. خروجی نیز از نوع ماتریس میباشد.
توضیحات کامل به همراه مثال در آدرس گیت هاب این کتابخانه موجود میباشد