Эффективность функционирования системы

Эффективность нейронной сети будем оценивать следующим образом. Рассмотрим
2 структуры нейронной сети: сеть 1, обученную на идеальных последовательностях,
и сеть 2, обученную на зашумленных последовательностях. Проверка функционирования производится на 100 векторах входа при различных уровнях шума.

Приведем фрагмент сценария appcr1, который выполняет эти операции:

noise_range = 0:.05:.5;

max_test = 100;

network1 = [];

network2 = [];

T = targets;

% Выполнить тест

for noiselevel = noise_range

errors1 = 0;

errors2 = 0;

for i=1:max_test

P = alphabet + randn(35,26)*noiselevel;

% Тест для сети 1

A = sim(net,P);

AA = compet(A);

errors1 = errors1 + sum(sum(abs(AA–T)))/2;

% Тест для сети 2

An = sim(netn,P);

AAn = compet(An);

errors2 = errors2 + sum(sum(abs(AAn–T)))/2;

echo off

end

% Средние значения ошибок (100 последовательностей из 26 векторов целей

network1 = [network1 errors1/26/100];

network2 = [network2 errors2/26/100];

end

Тестирование реализуется следующим образом. Шум со средним значением 0 и стандартным отклонением от 0 до 0.5 с шагом 0.05 добавляется к векторам входа. Для каждого уровня шума формируется 100 зашумленных последовательностей для каждого символа
и вычисляется выход сети. Выходной сигнал обрабатывается М-функцией compet с той целью, чтобы выбрать только один из 26 элементов вектора выхода. После этого оценивается количество ошибочных классификаций и вычисляется процент ошибки.

Соответствующий график погрешности сети от уровня входного шума показан на рис. 9.25.

plot(noise_range,network1*100,'––',noise_range,network2*100);

Рис. 9.25

Сеть 1 обучена на идеальных векторах входа, а сеть 2 – на зашумленных. Обучение сети на зашумленных векторах входа значительно снижает погрешность распознавания реальных векторов входа. Сети имеют очень малые погрешности, если среднеквадратичное значение шума находится в пределах от 0.00 до 0.05. Когда к векторам был добавлен шум со среднеквадратичным значением 0.2, в обеих сетях начали возникать заметные ошибки. При этом погрешности нейронной сети, обученной на зашумленных векторах, на 3–4 % ниже, чем для сети, обученной на идеальных входных последовательностях.

Если необходима более высокая точность распознавания, сеть может быть обучена либо в течение более длительного времени, либо с использованием большего количества нейронов в скрытом слое. Можно также увеличить размер векторов, чтобы пользоваться шаблоном с более мелкой сеткой, например 10´14 точек вместо 5´7.

Проверим работу нейронной сети для распознавания символов. Сформируем зашумленный вектор входа для символа J (рис. 9.26):

noisyJ = alphabet(:,10) + randn(35,1)*0.2;

plotchar(noisyJ); % Зашумленный символ J (рис.9.26)

Рис. 9.26

A2 = sim(net,noisyJ);

A2 = compet(A2);

answer = find(compet(A2) == 1)

answer = 10

plotchar(alphabet(:,answer)); % Распознанный символ J

Нейронная сеть выделила 10 правильных элементов и восстановила символ J
без ошибок (рис. 9.27).

Рис. 9.27

Эта задача демонстрирует, как может быть разработана простая система распознавания изображений. Заметим, что процесс обучения не состоял из единственного обращения к обучающей функции. Сеть была обучена несколько раз при различных векторах входа. Обучение сети на различных наборах зашумленных векторов позволило обучить сеть работать с изображениями, искаженными шумами, что характерно для реальной практики.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: