Результат работы программы PERC



<< P E R C E P T R O N >> (Нейроимитатор)

-----------------------------------------

Выполнено 243 итераций

Ошибка обучения 4.9997994218E-03

Нейронная сеть обучена, параметры записаны в файл

SAMPLE.DAT

 

Текст программы TEST.

PROGRAM TEST;

 

(* T E S T - Тестирующая программа для

нейроимитатора PERC *)

 

CONST

CMaxInp = 20;

CMaxOut = 10;

CMaxImages = 15;

CBiasNeuron = 1.0;

 

TYPE

TMatrix = ARRAY[0..CMaxInp,1..CMaxOut] OF REAL;

TInpVector = ARRAY[1..CMaxInp] OF REAL;

TOutVector = ARRAY[1..CMaxOut] OF REAL;

TPerceptron = RECORD

   NInp : INTEGER;

   NOut : INTEGER;

   Inp : TInpVector;

   Out : TOutVector;

   W : TMatrix;

END;

 

VAR

VNet   : TPerceptron;

VTemp  : REAL;

VCorrect : REAL;

Vi, Vj, Vk : INTEGER;

VOK    : BOOLEAN;

VFile  : FILE OF TPerceptron;

 

PROCEDURE LoadNet;

(* Чтение параметров нейронной сети из файла SAMPLE.DAT.

Производится контроль за операциями ввода с использованием

ключа I+ и I- компилятора ТУРБО ПАСКАЛЯ *)

 

BEGIN

ASSIGN( VFile, 'SAMPLE.DAT' );

{$I-}

RESET( VFile );

{$I+}

VOK := (IOResult = 0);

 

IF VOK THEN

BEGIN

   {$I-}

   READ( VFile, VNet );

   CLOSE ( VFile );

   {$I+}

   VOK := (IOResult = 0);

END;

END;

 

FUNCTION Sigmoid( Z: REAL ): REAL;

BEGIN

Sigmoid := 1.0/(1.0+EXP(-Z));

END;

 

BEGIN

VOK := TRUE;

RANDOMIZE;

(* Чтение параметров обученной нейросети *)

LoadNet;

IF (NOT VOK) THEN

BEGIN

   WRITELN('Ошибка при чтении файла');

   HALT;

END;

VOK := TRUE;

WITH VNet DO

BEGIN

   WRITELN('<<P E R C E P T R O N>> (Тестирующая программа)');

   WRITELN('-----------------------------------------------');

   WRITELN(' ВОПРОС            ОТВЕТ ВЕРНЫЙ ОТВЕТ ');

   WRITELN('-----------------------------------------------');

   FOR Vi := 1 TO CMaxImages DO

   BEGIN

       (* Подача на вход случайного образа *)

       Vk := 0;

       FOR Vj:=1 TO NInp DO

       BEGIN

           (* Случайно 0 или 1 *)

           Inp[Vj] := RANDOM( 2 );

           (* Подсчет единиц *)

           IF ( Inp[Vj] > 0 )

           THEN Vk := Vk + 1;

       END;

       (* Правильный ответ известен ! *)

       IF ( Vk > (NInp-Vk) )

       THEN VCorrect := 1.0

       ELSE VCorrect := 0.0;

       (* Ответ выдает нейросеть *)

       FOR Vk := 1 TO NOut DO

       BEGIN

           VTemp := CBiasNeuron*W[0,Vk];

           FOR Vj := 1 TO NInp DO

           BEGIN

               VTemp := VTemp +

                    Inp[Vj]*W[Vj,Vk];

           END;

           Out[Vk] := Sigmoid( VTemp );

       END;

       (* Выдача результатов *)

       FOR Vj := 1 TO NInp DO

           WRITE( Inp[Vj]:2:0 );

       WRITELN(' ',Out[1]:4:2,' ', VCorrect:2:0);

   END;

END;

WRITELN('-------------------------------------------------');

END.

 

Результат работы программы TEST.

 

<<P E R C E P T R O N>> (Тестирующая программа)

-----------------------------------------------

 ВОПРОС            ОТВЕТ ВЕРНЫЙ ОТВЕТ

-----------------------------------------------

 0 0 0 0 1 1 1 1 0 0 0.00 0

 0 0 1 0 0 0 0 1 0 1 0.00 0

 1 1 0 0 0 0 0 1 0 0 0.00 0

 1 1 1 1 0 1 0 1 1 1 1.00 1

 0 1 1 1 0 1 1 0 0 0   0.01 0

 1 0 1 0 1 0 1 1 1 0 0.99 1

 1 0 1 1 1 0 0 1 1 0 0.98 1

 1 0 1 1 1 1 0 0 1 1 1.00 1

 1 1 0 1 1 1 1 0 1 0 1.00 1

 1 1 0 1 1 1 0 0 0 1 1.00 1

 0 0 0 0 1 1 0 1 0 1 0.00 0

 1 0 0 1 0 0 0 0 0 1 0.00 0

 1 0 0 1 0 0 0 1 1 0 0.00 0

 0 1 0 1 1 1 0 1 0 0 0.02 0

 1 1 1 1 1 1 0 1 1 0 1.00 1

--------------------------------------------

 

Задачи.

1. При помощи программы PERC можно изучить зависимость решения от объема данных обучающей выборки. Это достигается изменением значения переменной Nimages в подпрограмме GetDataBase. Попробуйте объяснить ухудшение результатов теста при обучении с постепенным уменьшением числа образов.

2. Модифицируйте программы PERC и TEST, изменив тип переходной функции нейрона. Сравните результаты.

3. Проведите исследование зависимости скорости обучения от темпа (значение CEta) и начального значения весов (значение CInitWeight). Объясните полученные вами результаты.


© 1994, С. А. Терехов, оригинальный текст
© 1998, С. А. Терехов, электронная версия


Дата добавления: 2018-11-24; просмотров: 220; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!