на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Нейронні мережі в системах керування динамічними об'єктами
p align="left">Більшість сьогоднішніх нейрокомп'ютерів являють собою просто персональний комп'ютер або робочу станцію, до складу яких входить додаткова нейроплата. До їхнього числа відносяться, наприклад, комп'ютери серії FMR фірми Fujіtsu. Такі системи мають безперечне право на існування, оскільки їхніх можливостей цілком достатньо для розробки нових алгоритмів і вирішення великого числа прикладних задач методами нейроматематики. Однак найбільший інтерес представляють спеціалізовані нейрокомп'ютери, що безпосередньо реалізують принципи НМ. Типовими представниками таких систем є комп'ютери сімейства Mark фірми TRW (перша реалізація персептрона, розроблена Розенблатом, називалася Mark І). Модель Mark ІІІ фірми TRW являють собою робочу станцію, що містить до 15 процесорів сімейства Motorola 68000 з математичними співпроцесорами. Усі процесори об'єднані шиною VME. Архітектура системи, що підтримує до 65 000 віртуальних процесорних елементів з більш ніж 1 млн. з'єднань, що набудовуються, дозволяє обробляти до 450 тис. міжз'єднань / с. Mark ІV - це однопроцесорний суперкомп'ютер з конвеєрною архітектурою. Він підтримує до 236 тис. віртуальних процесорних елементів, що дозволяє обробляти до 5 млн. міжз'єднань / с. Комп'ютери сімейства Mark мають загальну програмну оболонку ANSE (Artіfіcіal Neural System Envіronment), що забезпечує програмну сумісність моделей. Крім зазначених моделей фірми TRW пропонує також пакет Mark ІІ - програмний эмулятор НМ.

Іншою цікавою моделлю є нейронкомп'ютер NETSІ, створений фірмою Texas Іnstruments на базі розробок Кембріджського університету. Його топологія являє собою тривимірні ґрати стандартних обчислювальних вузлів на базі процесорів 80188. Комп'ютер NETSІ використовується для моделювання таких моделей НМ, як мережа Хопфилда - Кохонена і НМ зі зворотнім поширенням. Його продуктивність досягає 450 млн. міжз'єднань / с.

Фірма Computer Recognіtііon Systems (CRS) продає серію нейрокомп'ютерів WІZARD/CRS 1000, призначених для обробки відеозображень. Розмір вхідного зображення 512 x 512 пікселей. Модель CRS 1000 вже знайшла застосування в промислових системах автоматичного контролю.

Сьогодні на ринку представлено багато моделей нейрокомп'ютерів. Насправді їх, очевидно, набагато більше, але найбільш могутні і перспективні моделі як і раніше створюються за замовленнями військових. Нажаль, не маючи достатньої інформації про моделі спеціального призначення, важко скласти уявлення про істинні можливості сучасних комп'ютерів.

{Програмна реалізація нейронної мережі Хебба}

unit rou_main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes,

Graphics, Controls, Forms,Dialogs, ExtCtrls,

StdCtrls, Grids, Buttons;

const

yes='y'; //Стан активності/не активності

no='n'; //комірки елемента TStringGrid

str=10; //Розміри нейрону

stol=10;

type

{Користувацькі типи даних}

one_element= array [0..str*stol+4] of integer; //Опис нейрона

W_type= array [0..3,0..str*stol] of integer; //Опис нейронної мережі

S_type=array [0..3] of integer; //Масив сумарних

//вихідних результатів

TForm1 = class(TForm)

{Опис елементів форми}

Panel1: TPanel;

s1: TStringGrid; //Поле першого нейрону

l1: TLabel;

Bevel1: TBevel;

Memo1: TMemo; //Інформаційне поле

Label2: TLabel;

s2: TStringGrid; //Поле другого нейрону

l2: TLabel;

s3: TStringGrid; //Поле третього нейрону

l3: TLabel;

s4: TStringGrid; //Поле четвертого нейрону

l4: TLabel;

s5: TStringGrid; //Поле для символів, що розпізнаються

Label6: TLabel;

BitBtn1: TBitBtn; //Кнопка "Teaching"

BitBtn2: TBitBtn; //Кнопка "Find"

BitBtn3: TBitBtn; //Кнопка "Exit"

BitBtn14: TBitBtn; //Кнопка "Clean"

BitBtn8: TBitBtn; //Кнопка "Clean"

BitBtn11: TBitBtn; //Кнопка "Clean"

BitBtn15: TBitBtn; //Кнопка "Clean"

BitBtn18: TBitBtn; //Кнопка "Clean"

BitBtn4: TBitBtn; //Кнопка "Load"

BitBtn5: TBitBtn; //Кнопка "Save"

{Процедури і функції основної форми}

procedure s1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure FormCreate(Sender: TObject);

procedure s1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure BitBtn1Click(Sender: TObject);

procedure Initialization_M;

procedure Vivod_W (W:W_type);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure BitBtn5Click(Sender: TObject);

procedure BitBtn14Click(Sender: TObject);

procedure BitBtn8Click(Sender: TObject);

procedure BitBtn11Click(Sender: TObject);

procedure BitBtn15Click(Sender: TObject);

procedure BitBtn18Click(Sender: TObject);

end;

{Допоміжні процедури і функції}

procedure Raschet_b1;

function convert (s: string): integer;

procedure Read_str_grd (str_grd:TStringGrid;var M:one_element);

function Check_result (num_letter,num_nero:integer):boolean;

procedure Obuchenie(num_letter,num_nero:byte);

function Check_Learning :boolean;

procedure checkFillM5(Y:integer);

procedure clear_stringgrid (Sender:Tobject);

function mask_el: W_type;

procedure re_mask_el(mask_elem: W_type);

{Основні змінні}

var

Form1 :TForm1; //Змінна форми

M :array [0..4] of one_element; //Масив, що описує нейрони мережі

W :W_type; //Опис нейронної мережі

prizn :boolean;

S :S_type;

i :integer;

f :file of W_type; //Змінна файлу для збереження

//стану нейронної мережі

implementation

{$R *.dfm}

{Процедура малювання форми}

procedure TForm1.s1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

begin

(sender as tstringgrid).canvas.Brush.Color:=$a08000;

if (sender as tstringgrid).Cells[Acol,Arow]=yes then

(sender as tstringgrid).canvas.FillRect(Rect)

else begin

(sender as tstringgrid).canvas.Brush.Color:=clCream;

(sender as tstringgrid).canvas.FillRect(Rect)

end;

end;

{Процедура створення форми}

procedure TForm1.FormCreate(Sender: TObject);

begin

prizn:=false;

clear_stringgrid (s1); //Очищення поля нейрону 1

clear_stringgrid (s2); //Очищення поля нейрону 2

clear_stringgrid (s3); //Очищення поля нейрону 3

clear_stringgrid (s4); //Очищення поля нейрону 4

clear_stringgrid (s5); //Очищення поля нейрону 5

end;

{Процедура активації комірки нейрону}

procedure TForm1.s1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (sender as tstringgrid).Cells[(sender as tstringgrid).Col,(sender as tstringgrid).Row]=yes then

(sender as tstringgrid).Cells[(sender as tstringgrid).Col,(sender as tstringgrid).Row]:=no

else (sender as tstringgrid).Cells[(sender as tstringgrid).Col,(sender as tstringgrid).Row]:=yes;

end;

{Процедура навчання нейронної мережі}

procedure TForm1.BitBtn1Click(Sender: TObject);

var i,j:integer;

begin

Memo1.Clear; //Очищення інформаційного поля

Initialization_M; //Ініціалізація масиву W для навчання

Memo1.Lines.Add('Initialization of the weight ratio of neuron connections');

Vivod_W (W); //Вивід масиву W

Raschet_b1; //Розрахунок важелів зв'язків нейронів

//для першого нейрону

Memo1.Lines.Add('Calculation the firs simbol:');

Vivod_W (W); //Вивід масиву W

{Навчання першого нейрону}

Check_result (0,0);

Check_result (0,1);

Check_result (0,2);

Check_result (0,3);

{Навчання інших нейронів}

for i:=1 to 3 do

for j:= 0 to 3 do

begin

while not Check_result (i,j) do

Obuchenie (i,j); //Навчання нейрону доки не отримано

//жаданий результат

end;

Memo1.Lines.Add('Result weight ratio ');

Vivod_W (W); //Вивід масиву W

if Check_Learning then Memo1.Lines.Add('Teaching is successful.')

else Memo1.Lines.Add('Teaching is impossible.');

BitBtn1.Enabled:=false; //Кнопка "Teaching" неактивна

BitBtn2.enabled:=true; //Кнопка "Find" активна

BitBtn5.enabled:=true; //Кнопка "Save" активна

end;

{Функція інтерпретації активності комірки нейрона}

function convert (s: string): integer;

begin

if s=yes then Result:=1

else Result:=-1;

end;

{Функція початкової ініціалізації масиву W}

procedure TForm1.Initialization_M;

var

str1 :string;

j,i :byte;

begin

{Зчитуємо зображення навчальних символів}

Read_str_grd (s1,M[0]);

Read_str_grd (s2,M[1]);

Read_str_grd (s3,M[2]);

Read_str_grd (s4,M[3]);

M[0,str*stol+1]:=1;

M[1,str*stol+2]:=1;

M[2,str*stol+3]:=1;

M[3,str*stol+4]:=1;

Memo1.Lines.Add('Giving of the set M:');

{Вивід на екран зчитаних даних}

for j:= 0 to length (M)-2 do

begin

for i:= 0 to length(M[j])-1 do str1:=str1+' '+inttostr(m[j,i]);

Memo1.Lines.Add(str1);

str1:='';

end;

end;

{Конвертація зображення на нейроні в числові дані}

procedure Read_str_grd (str_grd:TStringGrid;var M:one_element);

var i,j:integer;

begin

for i:=0 to str-1 do

for j:=0 to stol-1 do

M[i*stol+j+1]:=convert(str_grd.Cells[j,i]); //Інтерпретація значення

//комірок нейрона

M[0]:=1;

for i:= str*stol+1 to str*stol+4 do

M[i]:=-1;

end;

{Процедура виводу на екран вмісту масиву W}

procedure TForm1.Vivod_W (W:W_type);

var

i,j :byte;

str :string;

begin

for j:=0 to length (W)-1 do

begin

Form1.Memo1.Lines.Add('W'+inttostr(j+1)+':');

for i:=0 to length (W[j])-1 do str:=str+ ' '+inttostr (W[j,i]);

Form1.Memo1.Lines.Add(str);

str:='';

end;

end;

{Процедура розрахунку важелів зв'язків нейронів для першого нейрону}

procedure Raschet_b1;

var

i,j:byte;

begin

for j:=0 to length(W)-1 do

begin

for i:=0 to str*stol do

W[j,i]:=W[j,i]+M[0,i]*M[0,str*stol+J+1];

end;

end;

{Функція визначення правильності навчання}

function Check_result (num_letter,num_nero:integer):boolean;

var

i :integer;

stroke :string;

begin

s[num_nero]:=0;

for i:=0 to str*stol do

begin

s[num_nero]:=s[num_nero]+W[num_nero,i]*M[num_letter,i];

end;

stroka:='Sending the char '+inttostr(num_letter+1)+' to the

'+inttostr(num_nero+1)+' neuron';

Form1.Memo1.Lines.Add(stroka);

Form1.Memo1.Lines.Add('S'+inttostr(num_nero+1)+'='+inttostr(s[num_nero]));

if s[num_nero]<=0 then s[num_nero]:=-1

else s[num_nero]:=1;

if s[num_nero]= M[num_letter,str*stol+num_nero+1] then Result:=true

else begin

Result:=false;

Form1.Memo1.Lines.Add ('Incorrect result. Reteaching.');

end;

end;

{Процедура навчання нейрона}

procedure Obuchenie(num_letter,num_nero:byte);

var

p: integer;

begin

for p:=0 to str*stol do

W[num_nero,p]:=W[num_nero,p]+

M[num_letter,p]*M[num_letter,str*stol+num_nero+1];

end;

{Функція визначення правильності навчання нейронної мережі}

function Check_Learning :boolean;

var

res :array[0..3] of boolean;

s :array[0..3] of integer;

i,j,max,Y :integer;

s1 :string;

begin

{Подання на вхід мережі навчальних символів

і перевірка вірності реакції мережі на них}

for y:=0 to 3 do

begin

res[Y]:=false;

checkFillM5(Y);

for j:=0 to 3 do

begin

s[j]:=0;

for i:=0 to str*stol do

begin

s[j]:=s[j]+W[j,i]*M[4,i];

end;

end;

s1:='Identification of the Char ';

max:=s[0];

for i:=1 to 3 do

begin

s1:='S= '+inttostr(s[i]);

if s[i]>max then

begin

max:=s[i];

end;

end;

if max>0 then res[Y]:=true;

end;

result:=true;

{Перевірка чи на всі навчальні зображення мережа реагує вірно}

for i:=0 to 3 do

if not res[i] then

begin

result:=false;

break;

end;

end;

{Процедура вибору символа}

procedure checkFillM5(Y:integer);

var

i: integer;

begin

for i:=1 to str*stol do M[4,i]:=M[y,i]

end;

{Процедура визначення символу відповідно до навчальних зображень}

procedure TForm1.BitBtn2Click(Sender: TObject);

var

s: array [0..3] of integer;

i,j,k: byte;

max: integer;

strng: string;

begin

Memo1.Lines.Add('Identification of the Char ');

l1.Color:=clSilver;

l2.Color:=clSilver;

l3.Color:=clSilver;

l4.Color:=clSilver;

Read_str_grd (s5,M[4]); //Зчитуємо зображення символу

for j:=0 to 3 do

begin

s[j]:=0;

for i:=0 to str*stol do

begin

s[j]:=s[j]+W[j,i]*M[4,i]; //Подання символу на нейрони і

//визначення результуючих сум

end;

end;

max:=s[0];

k:=0;

for i:=0 to 3 do

begin

strng:=strng+'S'+inttostr(i+1)+'='+inttostr(s[i])+' ';

if s[i]>max then

begin

max:=s[i]; //Визначення максимальної суми

k:=i; //Визначення індексу вірного зображення

end;

end;

Memo1.Lines.Add(strng);

Memo1.Lines.Add('The char '+inttostr (K+1)+' has been identified.');

case (k+1) of //Позначення червоним кольором

//символу, що визначений як вірний

1:l1.Color:=clRed;

2:l2.Color:=clRed;

3:l3.Color:=clRed;

4:l4.Color:=clRed;

end;

BitBtn1.Enabled:=true; //Кнопка "Teaching" активна

end;

{Функція отримання маски навчальних символів}

function mask_el: W_type;

var

i,j :integer;

mask_elem :W_type;

begin

for i:=0 to str-1 do

for j:=0 to stol-1 do

begin

{Конвертація зображень навчальних символів у числові значення}

mask_elem[0,i*stol+j]:=convert(Form1.s1.Cells[j,i]);

mask_elem[1,i*stol+j]:=convert(Form1.s2.Cells[j,i]);

mask_elem[2,i*stol+j]:=convert(Form1.s3.Cells[j,i]);

mask_elem[3,i*stol+j]:=convert(Form1.s4.Cells[j,i]);

end;

Result:=mask_elem;

end;

{Процедура збереження в файлі "symbol.rou" стану нейронної мережі}

procedure TForm1.BitBtn5Click(Sender: TObject);

var

W1 :W_type;

begin

w1:=mask_el;

AssignFile(f, 'symbol.rou');

Rewrite(f); //Відкриття файлу для запису даних

write(f,W); //Запис стану нейронної мережі

write(f,W1); //Запис зображення навчальних символів

CloseFile(f);

Form1.Memo1.Lines.Add('Teaching Configuration data has been saved'+

' in data file symbol.rou');

MessageDlg('Teaching Configuration data has been saved'+

' in data file symbol.rou', mtInformation, [mbOk], 0);

BitBtn4.enabled:=true; //Кнопка "Load" активна

end;

{Процедура активації нейронів мережі згідно із зображенням}

procedure re_mask_el(mask_elem: W_type);

var

i,j :integer;

begin

{Очищення нейронів}

clear_stringgrid(Form1.s1);

clear_stringgrid(Form1.s2);

clear_stringgrid(Form1.s3);

clear_stringgrid(Form1.s4);

for i:=0 to str-1 do

for j:=0 to stol-1 do

begin

{Запис нового зображення в нейрони}

if mask_elem[0,i*stol+j]=1 then Form1.s1.Cells[j,i]:=yes;

if mask_elem[1,i*stol+j]=1 then Form1.s2.Cells[j,i]:=yes;

if mask_elem[2,i*stol+j]=1 then Form1.s3.Cells[j,i]:=yes;

if mask_elem[3,i*stol+j]=1 then Form1.s4.Cells[j,i]:=yes;

end;

end;

{Процедура завантаження стану нейронної мережі із файлу "symbol.rou"}

procedure TForm1.BitBtn4Click(Sender: TObject);

var

W1 :W_type;

begin

AssignFile(f, 'symbol.rou');

FileMode := 0; //Режим читання

{$I-}

Reset(f); //Відкриття файлу для читання

{$I+}

if IOResult = 0 then //Файл знайдено

begin

MessageDlg('Data from data file symbol.rou has been just loaded',

mtInformation, [mbOk], 0);

read(f,w); //Читання стану нейронної мережі

read(f,W1); //Читання зображень навчальних символів

re_mask_el(W1); //Активація нейронів, згідно із

//зображенням навчальних символів

CloseFile(f);

end

else //Файл не знайдено

begin

MessageDlg('File access error: Data File symbol.rou is epcent',

mtWarning, [mbOk], 0);

Memo1.Lines.Add('Data File symbol.rou is epcent');

end;

Form1.BitBtn2.Enabled:=true; //Кнопка "Find" активна

end;

{Процедура очищення поля нейрона}

procedure clear_stringgrid (Sender:Tobject);

var

i,j :byte;

begin

for i:=0 to (sender as TStringGrid).ColCount-1 do

for j:=0 to (sender as TStringGrid).RowCount-1 do

(sender as TStringGrid).Cells[i,j]:=no;

end;

{Очищення нейрону 1}

procedure TForm1.BitBtn14Click(Sender: TObject);

begin

clear_stringgrid (s1);

end;

{Очищення нейрону 2}

procedure TForm1.BitBtn8Click(Sender: TObject);

begin

clear_stringgrid (s2);

end;

{Очищення нейрону 3}

procedure TForm1.BitBtn11Click(Sender: TObject);

begin

clear_stringgrid (s3);

end;

{Очищення нейрону 4}

procedure TForm1.BitBtn15Click(Sender: TObject);

begin

clear_stringgrid (s4);

end;

{Очищення поля символу, що розпізнається}

procedure TForm1.BitBtn18Click(Sender: TObject);

begin

clear_stringgrid (s5);

end;

end.

Страницы: 1, 2, 3, 4, 5, 6, 7



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.