تشخیص 10 نمونه دست خط اعداد صفر تا نه فارسی توسط شبکه عصبی FF و BP
برای تمرین شبکه عصبی مصنوعی در نرم افزار متلب با استفاده از nntool میتوان مسئله زیر را حل کرد:
1- تأمین داده:
10 الگو اعداد در تصاویر به ابعاد 5 در 5 پیکسل در نرم افزار Paint ویندوز رسم شد. سپس این تصاویر توسط دستورات مربوطه در نرم افزار مطلب فراخوانی شدند.
2- تحلیل داده:
به منظور تحلیل در شبکه عصبی داده ها به صورت ماتریس های 25 در 10 برای هر عدد شکل بندی شدند. در حقیقت 25 ورودی و 10 الگو. هر ستون از ماتریس معرف یک الگو در آن عدد و هر ردیف معرف یک ورودی است. این ماتریس های ده گانه معرف Input های شبکه خواهند بود (qi ها). برای Target های شبکه هم باید ماتریس هایی با تعداد ستون های مساوی با Input تهیه کرد. به طور مثال برای عدد صفر ماتریسی تعریف شد که درایه اول آن مقدار یک و مابقی درایه های آن صفر بودند. به همین ترتیب برای بقیه خروجی ها در اعداد دیگر هم ماتریس هایی تهیه شد که درایه متناظر با آن عدد در ماتریس هدف برابر با یک و بقیه درایه ها صفر فرض شدند (ti ها).
0 1 0 0 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0
2 0 0 1 0 0 0 0 0 0 0
3 0 0 0 1 0 0 0 0 0 0
4 0 0 0 0 1 0 0 0 0 0
5 0 0 0 0 0 1 0 0 0 0
6 0 0 0 0 0 0 1 0 0 0
7 0 0 0 0 0 0 0 1 0 0
8 0 0 0 0 0 0 0 0 1 0
9 0 0 0 0 0 0 0 0 0 1
برای هر عدد یک شبکه تهیه شد. شبکه از نوع Feed-forward BackProp؛ با ورودی qi و خروجی ti؛ سه لایه که لایه های اول و دوم هر کدام 25 نرون و هر سه لایه تابع انتقال TANSIG دارند. هر شبکه با ورودی qi و خروجی ti، با epoch=10000 آموزش داده شدند.
3- تحلیل نتایج شبکه:
خروجی هر شبکه به شرح زیر بدست آمد:
0 [0.99992,4.9725e-05,1.7671e-06,0.040654,0.00037796,3.7214e-05,3.6527e-06,0.019003,0.01166,2.9554e-05]
1 [6.5098e-05,2.9489e-06,1.2695e-05,3.4441e-05,9.9979e-07,4.1907e-06,1.7494e-05,2.9304e-05,3.26e-06,0.0021453]
2 [6.8002e-05,0.0017926,0.99988,6.6737e-05,3.6021e-05,0.00035595,4.531e-05,0.00012083,1.6068e-05,0.092291]
3 [2.5144e-05,4.0569e-05,0.0063247,0.99993,0.00040028,6.2485e-05,0.34758,4.0892e-05,0.027589,3.8455e-05]
4 [1.4357e-05,2.4637e-06,6.5854e-07,4.465e-05,0.99999,1.6918e-05,3.6206e-06,2.5962e-05,6.9156e-05,1.516e-05]
5 [0.011737,0.023499,0.00332,0.020809,6.9177e-05,0.016958,0.030744,0.090168,0.13024,0.028836]
6 [3.043e-05,0.00014756,6.7088e-06,3.1653e-05,6.5538e-07,2.281e-06,3.3134e-06,8.1877e-06,2.2659e-06,7.3393e-07]
7 [6.9188e-05,3.7426e-05,0.00055262,7.9546e-05,7.7026e-06,1.1256e-05,0.00023441,0.0087708,1.0612e-06,0.069374]
8 [1.0423e-05,7.3414e-05,1.2585e-05,4.8841e-06,8.6015e-05,1.3391e-05,1.8509e-06,0.012729,0.99996,1.6247e-06]
9 [5.9235e-05,7.1233e-05,2.0543e-05,5.2722e-05,6.0488e-05,3.7694e-05,4.8072e-05,9.0098e-05,1.9078e-05,3.3969e-05]
همین اعداد را برای بررسی بهتر وقتی به حالت uint8 میبریم:
0 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0
2 0 0 1 0 0 0 0 0 0 0
3 0 0 0 1 0 0 0 0 0 0
4 0 0 0 0 1 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 1 0
9 0 0 0 0 0 0 0 0 0 0
شبکه های مربوط به اعداد 0-2-3-4-8 به خوبی خروجی مطلوب را ارائه داده اند. در شبکه مربوط به عدد 1 را با تغییر پارامتر های (max_fil=60) و (min_grad=0) و توقف آموزش در تکرار 200 ام به نتیجه مطلوب رسیدیم.
در شبکه مربوط به عدد 5 و 6 و 9 نیز نتیجه نهایی حتی با تغییر پارامتر های آموزش نیز به شکل زیر خواهد بود که مستلزم تهیه داده های جدید برای آموزش با داده های جدید است:
5 0 0 0 0 1 1 0 0 0 0
6 0 0 0 0 0 1 0 1 0 0
9 0 0 0 0 0 0 0 0 0 0
شبکه عدد 7 با تغییر پارامترها مثل شبکه 1 و (mu=.001) و توقف دستی در تکرار 50 ام به نتیجه مطلوب رسیدیم.
4- آزمایش شبکه:
برای تست شبکه نیز یک تصویر عدد 5 جدید به شبکه داده شد و نتایج زیر حاصل شد:
Output=[0 0 0 1 0 0 0 1 0 0];
نتیجه عدم شناخت صحیح این عدد را نشان میدهد. پس شبکه نیاز به تغییر یا آموزش بیشتر برای تشخیص عدد 5 جدید دارد.