Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Додаток C

Індивідуальне завдання:

Розробити нейронну мережу Хемінга, що зможе розпізнавати 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.026 с)...