Доброго времени суток. Пишу бакалаврскую работу по распознаванию с использованием нейросетей. Использую neural network toolbox. Программа должна распознавать квадратики и кружочки Вот код:
close all, clear all, clc;
warning off;
% Загрузка данных
load images
[R,Q] = size(images);
[S2,Q] = size(targets);
% Предобработка
[images_pp,meanA,stdA] = prestd(images);
P = images;
T = targets;
pause
% Создание сети
S1 = 25;
net = newff(minmax(P),[S1 S2],{'tansig' 'logsig'},'traingdx');
net = init(net);
% Обучение
net.performFcn = 'sse'; % Sum-Squared Error performance function
net.trainParam.goal = 1e0; % Sum-squared error goal.
net.trainParam.show = 20; % Frequency of progress displays (in epochs).
net.trainParam.epochs = 1000; % Maximum number of epochs to train.
net.trainParam.mc = 0.95; % Momentum constant.
net.trainParam.lr = 0.01;
pause
[net,tr] = train(net,P,T);
O = sim(net,P);
C = full(compet(O));
Error = sse(C-T)/(2*Q)
figure
imagesc(O)
figure
imagesc(C)
pause
Проблема в том, что ошибка обучения всегда очень большая от 25% до 50%. Изменение количества нейронов в скрытом слое не помогает. Данные для обучения загружаю из заранее приготовленного .mat файла. В images хранятся изображения в полутонах в виде столбцов. Первые 10 - круги, остальные - квадраты. В targets - целевые значения. 1 - круг, 2 - квадрат, 3 - что-то другое. Прогу делал из готового примера по распознаванию символов. Подскажите пожалуйста, где я не прав и как исправить можно? Заранее очень благодарен!