Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Індивідуальне завдання:
Розробити нейронну мережу Хемінга, що зможе розпізнавати 8 букв ім’я. При цьому обґрунтувати вибір:
- кількості рецепторних нейронів
- числа нейронів вихідного рівня
- розміру параметра e в підмережі Maxnet
- виду функції активації нейронів кожного шару
- розміру ваги зв’язку та зміщень в під мережі Хемінга.
Провести дослідження щодо розпізнавання створеною мережею еталонних букв та букв з помилками.
Завдамо еталонні зображення:
Так як завдано вісім еталонних зображень, то мережа повинна мати по вісім Z-, A- и Y- нейронів. Зображення завдані 30-мірними векторами, тобто мережа повинна мати тридцять S -нейронів, що сприймають вхідні зображення.
Зміщення bi Z- нейронов дорівнює
Константу , що визначає вагу від’ємних зв’язків у підмережі Maxnet, визначимо з равенства , так як n = 8, то = 0,125.
Текст програми:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1_rz1.h"
#include "Unit1.h"
#include "HELP.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float M1[30],M2[30],M3[30],M4[30],M5[30],M6[30],M7[30],M8[30],M9[30];
float W[30][9];
int R[6][5];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
int E1[30]={1,-1,-1,-1,1, 1,-1,-1,-1,1,1,-1,-1,-1,1,1,-1,-1,-1,1, -1,1,-1,1,-1, -1,-1,1,-1,-1};
int E2[30]={-1,-1,1,1,-1,-1,-1,-1,-1,-1, -1,-1,1,1,-1, -1,-1,1,1,-1, -1,-1,1,1,-1, -1,-1,1,1,-1,};
int E3[30]={-1,1,1,1,1,1,-1,-1,-1,-1, 1,-1,-1,-1,-1, 1,-1,-1,-1,-1, 1,-1,-1,-1,-1, -1,1,1,1,1,};
int E4[30]={-1,-1,1,-1,-1, -1,1,1,1,-1, -1,-1,1,-1,-1, -1,-1,1,-1,-1, -1,-1,1,-1,-1, -1,-1,1,1,-1,};
int E5[30]={-1,1,1,1,-1, 1,-1,-1,-1,1, 1,-1,-1,-1,1,1,-1,-1,-1,1, 1,-1,-1,-1,1, -1,1,1,1,-1,};
int E6[30]={1,-1,-1,1,-1, 1,-1,1,-1,1, 1,1,-1,-1,-1, 1,-1,-1,-1,-1, 1,-1,-1,-1,-1, 1,-1,-1,-1,-1,};
int E7[30]={1,-1,-1,-1,1, 1,-1,-1,-1,1, 1,-1,-1,-1,1, 1,1,1,1,1, -1,-1,-1,-1,1, 1,1,1,1,-1,};
int E8[30]={-1,-1,1,-1,-1, -1,1,-1,1,-1, 1,-1,-1,-1,1, 1,-1,-1,-1,1, 1,1,1,1,1, 1,-1,-1,-1,1,};
int t=1;
int k=0;
for(int i=0; i<30; i++)
{
M1[i]=E1[i]; M2[i]=E2[i]; M3[i]=E3[i]; M4[i]=E4[i];
M5[i]=E5[i]; M6[i]=E6[i]; M7[i]=E7[i]; M8[i]=E8[i];
k++;
if(k>5)
{k=1; t++;}
if(M1[i]>0) StringGrid1->Cells[k][t]="$"; else StringGrid1->Cells[k][t]="";
if(M2[i]>0) StringGrid2->Cells[k][t]="$"; else StringGrid2->Cells[k][t]="";
if(M3[i]>0) StringGrid3->Cells[k][t]="$"; else StringGrid3->Cells[k][t]="";
if(M4[i]>0) StringGrid4->Cells[k][t]="$"; else StringGrid4->Cells[k][t]="";
if(M5[i]>0) StringGrid5->Cells[k][t]="$"; else StringGrid5->Cells[k][t]="";
if(M6[i]>0) StringGrid6->Cells[k][t]="$"; else StringGrid6->Cells[k][t]="";
if(M7[i]>0) StringGrid7->Cells[k][t]="$"; else StringGrid7->Cells[k][t]="";
if(M8[i]>0) StringGrid8->Cells[k][t]="$"; else StringGrid8->Cells[k][t]="";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
int t=1;
int k=0;
for(int i=0; i<30; i++)
{ k++;
if(M1[i]>0) {W[i][1]=0.5; StringGrid9->Cells[1][i+1]="0.5";}
else {W[i][1]=-0.5; StringGrid9->Cells[1][i+1]="-0.5";}
if(M2[i]>0) {W[i][2]=0.5; StringGrid9->Cells[2][i+1]="0.5";}
else {W[i][2]=-0.5; StringGrid9->Cells[2][i+1]="-0.5";}
if(M3[i]>0) {W[i][3]=0.5; StringGrid9->Cells[3][i+1]="0.5";}
else {W[i][3]=-0.5; StringGrid9->Cells[3][i+1]="-0.5";}
if(M4[i]>0) {W[i][4]=0.5; StringGrid9->Cells[4][i+1]="0.5";}
else {W[i][4]=-0.5; StringGrid9->Cells[4][i+1]="-0.5";}
if(M5[i]>0) {W[i][5]=0.5; StringGrid9->Cells[5][i+1]="0.5";}
else {W[i][5]=-0.5; StringGrid9->Cells[5][i+1]="-0.5";}
if(M6[i]>0) {W[i][6]=0.5; StringGrid9->Cells[6][i+1]="0.5";}
else {W[i][6]=-0.5; StringGrid9->Cells[6][i+1]="-0.5";}
if(M7[i]>0) {W[i][7]=0.5; StringGrid9->Cells[7][i+1]="0.5";}
else {W[i][7]=-0.5; StringGrid9->Cells[7][i+1]="-0.5";}
if(M8[i]>0) {W[i][8]=0.5; StringGrid9->Cells[8][i+1]="0.5";}
else {W[i][8]=-0.5; StringGrid9->Cells[8][i+1]="-0.5";}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=1; i<31; i++)
{
StringGrid9->Cells[0][i]=i; StringGrid9->Cells[i][0]=i;
M1[i]=M2[i]=M3[i]=M4[i]=M5[i]=M6[i]=M7[i]=M8[i]=M9[i]=-1;
}
for(int i=1; i<20; i++)
{ StringGrid10->Cells[i][0]=i; }
StringGrid10->Cells[0][1]="Uвх1"; StringGrid10->Cells[0][2]="Uвх2"; StringGrid10->Cells[0][3]="Uвх3";
StringGrid10->Cells[0][4]="Uвх4"; StringGrid10->Cells[0][5]="Uвх5"; StringGrid10->Cells[0][6]="Uвх6";
StringGrid10->Cells[0][7]="Uвх7"; StringGrid10->Cells[0][8]="Uвх8";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{
float dop[9];
for(int i=1; i<9; i++) dop[i]=15;
for(int i=1; i<30; i++)
{
dop[1]=dop[1]+W[i][1]*M9[i]; dop[2]=dop[2]+W[i][2]*M9[i]; dop[3]=dop[3]+W[i][3]*M9[i];
dop[4]=dop[4]+W[i][4]*M9[i]; dop[5]=dop[5]+W[i][5]*M9[i]; dop[6]=dop[6]+W[i][6]*M9[i];
dop[7]=dop[7]+W[i][7]*M9[i]; dop[8]=dop[8]+W[i][8]*M9[i];
}
for(int j=1; j<9; j++)
dop[j]=dop[j]*0.125;
for(int j=1; j<9; j++)
for(int i=1; i<20; i++)
StringGrid10->Cells[i][j]="";
StringGrid10->Cells[1][1]=dop[1]; StringGrid10->Cells[1][2]=dop[2]; StringGrid10->Cells[1][3]=dop[3];
StringGrid10->Cells[1][4]=dop[4]; StringGrid10->Cells[1][5]=dop[5]; StringGrid10->Cells[1][6]=dop[6];
StringGrid10->Cells[1][7]=dop[7]; StringGrid10->Cells[1][8]=dop[8];
float s1=100; float s2=0; int p=1,n;
while(s1!=s2)
{
s1=s2; s2=0; p++;
for(int i=1; i<9; i++)
s2 = s2 + dop[i];
s2 = s2*0.125;
for(int j=1; j<9; j++)
{ dop[j]=dop[j]-s2+(dop[j]*0.125);
if(dop[j]<0)dop[j]=0; }
for(int i=1; i<9; i++)
StringGrid10->Cells[p][i]=dop[i];
float max=-5;
for(int i=1; i<9; i++)
{ if(dop[i]>max) { max = dop[i]; n = i; } }
}
Label5->Caption = n;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid11SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(StringGrid11->Cells[ACol][ARow] == "$")
{ StringGrid11->Cells[ACol][ARow] = "";
M9[ACol+(ARow-1)*5-1]= -1; }
else { StringGrid11->Cells[ACol][ARow] = "$";
M9[ACol+(ARow-1)*5-1]= 1; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{ Form1->Close(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(StringGrid1->Cells[ACol][ARow] == "$")
{ StringGrid1->Cells[ACol][ARow] = "";
M1[ACol+(ARow-1)*5-1]= -1; }
else { StringGrid1->Cells[ACol][ARow] = "$";
M1[ACol+(ARow-1)*5-1]=1; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid7SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(StringGrid7->Cells[ACol][ARow] == "$")
{ StringGrid7->Cells[ACol][ARow] = "";
M7[ACol+(ARow-1)*5-1]= -1; }
else { StringGrid7->Cells[ACol][ARow] = "$";
M7[ACol+(ARow-1)*5-1]=1; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Form1->Close(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::N8Click(TObject *Sender)
{ AboutBox->ShowModal();}
//---------------------------------------------------------------------------
void __fastcall TForm1::HELP1Click(TObject *Sender)
{ Form2->ShowModal(); }
//---------------------------------------------------------------------------
Результат роботи програми:
При завданні зображення без помилки:
При завданні зображення з помилками:
Висновки: В ході виконання розрахунково-графічного завдання придбали та закріпили знання і отримали практичні навички роботи з нейронною мережею Хемінга. Мережа розпізнає вісім букв, що завдаються без помилок і з помилками.
Додаток C
Дата публикования: 2014-12-08; Прочитано: 171 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!