Результат работы программы 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!