2016-11-18 33 views
1

Я учусь строить нейронные сети для регрессионных проблем. Он хорошо работает, приближаясь к линейным функциям. Настройка с 1-5-1 единицами с функциями линейной активации в скрытых и выходных слоях делает трюк и результаты быстрыми и надежными. Однако, когда я пытаюсь кормить его простые квадратичные данные (е (х) = х * х) вот что происходит:ANN: Аппроксимирующая нелинейная функция с нейронной сетью

С линейной функцией активации, он пытается соответствовать линейной функции через набор данных

enter image description here

И с функцией TANH она пытается установить кривую TANH через набор данных.

enter image description here

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


О мой код

Мои веса рандомизированного (-1, 1) входы не нормированы. Набор данных подается в случайном порядке. Изменение скорости обучения или добавление слоев не сильно меняет изображение.

Я создал jsfiddle,

место, чтобы играть с этой функция:

function trainingSample(n) { 
    return [[n], [n]]; 
} 

Он производит один образец обучения: массив входных векторного массива и целевой вектор массив , В этом примере он производит функцию f(x)=x. Измените его как [[n], [n*n]], и у вас есть квадратичная функция.

Кнопка воспроизведения находится в верхнем правом углу, а также два ввода для ввода этих значений вручную. Если поле цели (справа) остается пустым, вы можете проверить выход сети только с помощью прямого доступа.

Существует также файл конфигурации для сети в коде, где вы можете установить скорость обучения и другие вещи. (Поиск var Config)

+0

, где вы применяете свои функции активации? – lejlot

+0

В нейронах, на переднем проходе, передавая ему сумму входов. Я проверил данные учебника, передний проход работает хорошо. Очевидно, что проблема заключается в том, что BP –

+0

предоставляет ваш код, в противном случае невозможно помочь, слишком много вещей, которые могут быть неправильными. – lejlot

ответ

0

Мне пришло в голову, что в настройке, которую я описываю, невозможно узнать нелинейные функции из-за выбора функций. Нигде в переходе нет входной зависимости мощности выше 1, поэтому я вижу моментальный снимок моей функции активации на выходе. Duh.