Реализация однослойной нейронной сети (персептрона)
Курсовой проект - Менеджмент
Другие курсовые по предмету Менеджмент
строки j-столбца. Далее считается и выдается сообщение в зависимости от знака S:
y=
void __fastcall TForm1::BitBtn2Click(TObject *Sender)- при нажатии кнопки Обучить эта функция пересчитывает матрицу весов по формуле
,
где , а выбирается в зависимости от y. Если y=0 то .
Если y=1 то .
Исходный код программы находится в Приложении 1. [1-2]
Заключение
В результате работы были рассмотрены некоторые основы теории искусственных нейронных сетей. Был изучен и реализован алгоритм обучения персептрона. Разработано приложение с функционалом, описанным в разделе Постановка задачи. Имеется возможность определения фигуры нарисованной пользователем.
Для развития программы необходимо добавить такие функции как:
Масштабирование изображения
Увеличение количества фигур для распознавания путем увеличения нейронов в сети
Распознавание букв, цифр симфолов
Список использованной литературы и источников
1.Архангельский А.Я., Тагин М.А. Программирование в С++Builder 6 и 2006 Бином-Пресс, 2006.-1182 с.: ил
.И.Л. Каширина НЕЙРОСЕТЕВЫЕ ТЕХНОЛОГИИ Учебно-методическое пособие для вузов, 2008-72с.:ил
.Саймон Хайкин Нейронные сети: полный курс Второе издание, 2006-1105с.:ил
4."> - web-ресурс
Приложение 1- Исходные коды программы
Модуль Unit1.cpp
//---------------------------------------------------------------------------
#include
#include
#include
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form1;flag=false;check=false;S;y;g;X[10][10];W[10][10];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall TForm1::FormCreate(TObject *Sender)
{-> Canvas -> Brush -> Color = clWhite;-> DoubleBuffered = true;(int i=0;i<10;i++){(int j=0;j<10;j++){[i][j]=(rand()%7 - 3)/10.0;
//(((-1)*rand()%7/10)+(rand()%7/10));
}
}
}
//---------------------------------------------------------------------------__fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,X, int Y)
{-> Canvas -> Pen -> Color = clBlack;-> Canvas -> Pen->Width=5;(flag) Image1 -> Canvas -> LineTo(X, Y);
}
//---------------------------------------------------------------------------__fastcall TForm1::Image1MouseDown(TObject *Sender,Button, TShiftState Shift, int X, int Y)
{= true;-> Canvas -> MoveTo(X, Y);
}
//---------------------------------------------------------------------------__fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,Shift, int X, int Y)
{= false;
}
//---------------------------------------------------------------------------__fastcall TForm1::BitBtn4Click(TObject *Sender)
{->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
}
//---------------------------------------------------------------------------__fastcall TForm1::BitBtn1Click(TObject *Sender)
{(int a=0;a<10;a++)(int b=0;b<10;b++)[a][b]=0;
for (int a=0; a<10;a++) // проход 10х10 по квадратикам 30х30
{ int n=30;k=0;(int b=0; b<10;b++)
{(int i=k; i<n; i++){ l=a*30;
int m=l+30; // проход по квадрату 30х30
for (int j=l; j<m; j++)
{( Form1->Image1->Canvas->Pixels[i][j]== clBlack )
{[a][b] = 1;
}
};
}=n;=k+30;
}
}=0;(int a=0; a<10;a++){(int b=0; b<10;b++)
{=S+X[a][b]*W[a][b];
}
}(S>0)
{>MessageBox("Это треугольник!","Сообщение",MB_ICONINFORMATION);=1;
}{>MessageBox("Это круг!","Сообщение",MB_ICONINFORMATION);=0;
}
}
//---------------------------------------------------------------------------__fastcall TForm1::BitBtn2Click(TObject *Sender)
{(y==1) g=-1;(y==0) g=1;(int a=0; a<10;a++){(int b=0; b<10;b++)
{[a][b]=W[a][b]+1/2*g*X[a][b];
}
}(int i=0;iCells[j][i]=X[i][j];
}
}
}
//---------------------------------------------------------------------------