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

Я пытался смоделировать функции NN в MATLAB, прежде чем тестировать свою собственную закодированную сеть. Я тренировал y = x1+x2.

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

>> 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? Или это просто сверхспециализированный? Я считаю, что это проблема регрессии. Теперь я не знаю, чего мне ожидать от моей собственной закодированной сети. Мне было интересно, по каким критериям сходится эта НС, где она дает такой глупый результат? есть ли способ узнать, на какую функцию он сопоставляется (я не знаю, как!)? Моя собственная сеть даже не сойдется, потому что она проверяет квадрат ошибки суммы как условие разрыва цикла. Итак, как бороться с такой схемой обучения?

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

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

0 0 -------> 0

0 1 -------> 1000

1000 0 ----> 1

1 1 -------> 0

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


person Ashikur Rahman    schedule 29.01.2012    source источник


Ответы (1)


Позвонив

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);

вы создаете ИНС со скрытыми слоями размером 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.

person Franck Dernoncourt    schedule 03.02.2012