ساخت شبکه عصبی مصنوعی ساده با زبان javascript


ساخت شبکه عصبی مصنوعی ساده با زبان javascript

در این پست با هم می بینیم که چطور می توان از طریق کتابخانه Synaptic js در جاوا اسکریپت یک شبکه عصبی مصنوعی ساده طراحی کرد. Synaptic js این امکان را به ما می دهد تا از طریق node js بتوانیم یک سیستم یادگیری عمیق بسازیم.


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

در جواب این جمله باید گفت که ما قصد داریم ساده ترین حالت شبکه‌ عصبی مصنوعی، یک شبکه XOR را طراحی کنیم. قبل از شروع کار پیشنهاد میکنم ابتدا پست ساختار شبکه‌های عصبی مصنوعی به زبان ساده (Artificial Neural Network) را مطالعه کنید تا بیشتر با شبکه های عصبی آشنا بشید.

 

شروع برنامه نویسی

فرض را بر این میگیریم که شما ابتدا ساختار شبکه های عصبی را مطالعه کرده اید و آن را فرا گرفته اید. پس مستقیما به سراغ کد نویسی میرویم. ابتدا باید کتابخانه Synaptic js را دانلود کرده و آن را فراخوانی کنید. این کار برای برنامه نویسان وب بسیار معمول است. و دوستانی که تا به حال اینکار را انجام نداده اند، مراحل زیر را به ترتیب انجام دهند:

1- ابتدا یک فایل html در سیستم خود بسازید.

2- کتابخانه Synaptic js را با دستور script به فایل html فراخوانی کنید.

3- کدهای جاوااسکریپت که در ادامه خدمتتان عرض میکنم را هم نیز باید در تگ های <script></script> بنویسید.

 

برای ساخت لایه های شبکه عصبی میتونید از دستور ()new Layer که یک function در Synaptic است استفاده کنید.

عدد درون پرانتز نشان دهنده این است که هر لایه شما باید دارای چند نورون باشد.

const { Layer, Network } = window.synaptic;
var inputLayer = new Layer(2);
var hiddenLayer = new Layer(3);
var outputLayer = new Layer(1);

 

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

inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
var myNetwork = new Network({
 input: inputLayer,
 hidden: [hiddenLayer],
 output: outputLayer
});

حالا یک شبکه عصبی با 2 لایه ورودی، 3 لایه مخفی و یک لایه خروجی داریم که شکل آن را می توان به صورت زیر ترسیم کرد:

حالا میتوانیم شبکه خود را train کنیم

// train the network - learn XOR
var learningRate = .3;
for (var i = 0; i < 20000; i++) {
  // 0,0 => 0
  myNetwork.activate([0,0]);
  myNetwork.propagate(learningRate, [0]);
  // 0,1 => 1
  myNetwork.activate([0,1]);
  myNetwork.propagate(learningRate, [1]);
  // 1,0 => 1
  myNetwork.activate([1,0]);
  myNetwork.propagate(learningRate, [1]);
  // 1,1 => 0
  myNetwork.activate([1,1]);
  myNetwork.propagate(learningRate, [0]);
}

در این مرحله ما داریم شبکه خودمون رو 20 هزار بار train میکنیم، توی هر دوره ما چهار مقدار احتمالی [0,0] [0,1] [1,0] [1,1] را به شبکه وارد میکنیم.

train را با ([myNetwork.activate([0,0 شروع کردیم که [0,0] در واقع همان ورودی اولیه ما به شبکه است. به این عمل forward propagation گفته میشود.

بعد از هر دوره forward propagation باید Back propagation نیز انجام داد، و دلیل آن هم به روز رسانی وزن ها و بایاس های شبکه است.

عملیات back Propagation را با تکه کد ([myNetwork.propagate(learningRate, [0 انجام دادیم که learningRate یک ثابت است که به شبکه میگوید وزن‌ها را در هر دوره باید بر روی چه مقداری تنظیم کرد.

 

چطور شبکه عصبی را تست کنیم؟

بعد از اینکه شبکه ما 20 هزار بار train شد، میتوانیم شبکه را با 4 مقدار احتمالی به مانند زیر تست کنیم:

console.log(myNetwork.activate([0,0])); 
-> [0.015020775950893527]
console.log(myNetwork.activate([0,1]));
->[0.9815816381088985]
console.log(myNetwork.activate([1,0]));
-> [0.9871822457132193]
console.log(myNetwork.activate([1,1]));
-> [0.012950087641929467]

برای درک بهتر این پست پیشنهاد میکنم لینک زیر را نیز مشاهده کنید:

ورود به آموزش تصویری


ساخت شبکه عصبی مصنوعی ساده با زبان javascript
4.5/5
4.5
59
5
1

برای استفاده از تمامی امکانات وارد شوید

ارسال دیدگاه

دیدگاه ها

arefeh

|

1396/10/6

با سلام و تشکر از آموزش خوبتونمیخواستم بدونم این کد های جاوا اسکریپت رو کجا باید قرار داد و او رو اجرا کرد؟

پاسخ به این دیدگاه
انصراف

ابتدا یک فایل با پسوند html در سیستم خود بسازید و تگ های ابتدایی html را در آن ذخیره کنید. در تگ head متن زیر را paste کنید. < script src="https://cdnjs.cloudflare.com/ajax/libs/synaptic/1.1.4/synaptic.js" >< /script > و مابقی کد ها را در قسمت body و تگ script بنویسید

علی متقیان | 1396/10/7