Нейронная сеть: поезд Y = X1 + X2 Плохая производительность: как подготовить небольшой ошибочный паттерн для регрессии - PullRequest
0 голосов
/ 30 января 2012

Я пытался смоделировать NN-функции MATLAB перед тестированием моей собственной кодированной сети.Я тренировался у = х1 + х2.

Но посмотрите, как это работает,

>> net = newfit([1 2 3 4 5 0 1 2 5;1 2 3 4 5 1 1 1 1],[2 4 6 8 10 0 2 3 6],15);

>> net = train(net,[1 2 3 4 5 0 1 2 5;1 2 3 4 5 1 1 1 1],[2 4 6 8 10 0 2 3 6]);

>> sim(net,[1;4])

ans =

   12.1028

>> sim(net,[4;4])

ans =

    8.0000

>> sim(net,[4;1])

ans =

    3.0397

>> sim(net,[2;2])

ans =

    5.1659

>> sim(net,[3;3])

ans =

   10.3024

Может кто-нибудь объяснить, что не так с этими данными обучения?Разве недостаточно оценить y = x1 + x2?Или это просто чрезмерно специализировано?Я считаю, что это проблема регрессии.Теперь я не знаю, чего мне ожидать от моей собственной кодированной сети.Мне было интересно, на основании каких критериев сходится этот NN, где он дает такой глупый результат?Есть ли способ узнать, на какую функцию он отображается (я не знаю, как!)?Моя собственная сеть даже не сходится, потому что она проверяет ошибку суммы квадратов как условие разрыва цикла.Итак, как справиться с такой схемой обучения?

Однако у меня есть еще одна потрясающая схема обучения, которую я не могу тренировать.

Может ли кто-нибудь обучить следующий набор данных?Будет ли это работать / сходиться?

0 0 -------> 0

0 1 -------> 1000

1000 0 --> 1

1 1 -------> 0

Я использовал f (x) = x в выходном слое и использовал алгоритм обратного распространения, но для этого шаблонакод никогда не кажется сходящимся.

1 Ответ

1 голос
/ 03 февраля 2012

Позвонив

net = newfit([1 2 3 4 5 0 1 2 5;1 2 3 4 5 1 1 1 1],[2 4 6 8 10 0 2 3 6],15);

вы создаете ANN со скрытыми слоями размером 15, что, вероятно, слишком много для вашей проблемы. Кроме того, ваш тренировочный набор слишком мал.

Вот рабочий код (на старых компьютерах это займет некоторое время), я позволю вам проанализировать его и сравнить с вашим, пожалуйста, спросите, нужны ли вам дополнительные объяснения:

% Prepare input and target vectors
a = perms(1:9);
x = a(:, 1);
y = a(:, 2);
z = x + y;    
input = [x y];

% Create ANN
net = newfit(input',z',2);

% Learn
net.trainParam.epochs = 1000;
net = train(net, input', z');

Результаты практически идеальны:

>> sim(net,[1;4])

ans =

    5.0002

>> sim(net,[4;4])

ans =

    7.9987

>> sim(net,[4;1])

ans =

    4.9998

>> sim(net,[2;2])

ans =

    4.0024

>> sim(net,[3;3])

ans =

    5.9988

PS: NEWFIT устарела в R2010b NNET 7.0. Последнее использование в R2010a NNET 6.0.4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...