2012-01-28 4 views
0

Выходной слой моей нейронной сети (3-слойный) использует сигмоид как активацию, которая выводится только в диапазоне [0-1]. Однако, если я хочу обучать его выводам, выходящим за пределы [0-1], скажем тысячам, что мне делать?Выход нейронной сети: масштабирование выходного диапазона

Например, если я хочу, чтобы обучать

вход ----> выход

0 0 ------> 0

0 1 ------> 1000

1000 1 ----> 1

1 1 -------> 0

Моя программа работает для AND, OR, XOR е tc. В качестве входного выхода все в двоичном формате.

Были некоторые предложение использовать,

Активация:


у = лямбда * (абс (х) 1/(1 + ехр (-1 (х))))

Производная активации:


лямбда * (абс (у) y (1-y))

Это не сходилось для упомянутого шаблона обучения (если я не сделал ничего плохого). Есть ли какие-либо предложения, пожалуйста?

ответ

3

Для классификацией проблем, принято использовать сигмовидную/логистическую функцию активации в выходном слое, чтобы получить соответствующее вероятность значения в диапазоне [0,1]; в сочетании с кодированием 1-в-N для классификации нескольких классов, каждый вывод узла будет представлять вероятность экземпляра, принадлежащего к каждому значению класса.

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

К тому же вы должны быть осторожны, чтобы масштабировать функции ввода (путем нормализации всех функций в диапазоне [-1,1]).

+0

Привет! Но для того, чтобы реализовать ваше предложение о регрессионном случае, как мне нужно изменить свой код, например, я использую обратное распространение, где я использовал производную сигмоида для распространения ошибки. (Http: //www.speech. sri.com/people/anand/771/html/node37.html), я использовал этот алгоритм, теперь, если я не использую какой-либо сигмоид в выходе, что будет delk в этом случае? И если я хочу только обучать упомянутой модели, то какой тип топологии будет лучше? Регрессия или классификация? Я имею в виду, что бы вы сделали? –

+0

вместо функции активации сигмоида в выходном слое, используйте функцию тождества 'f (x) = x'. Кроме того, это целевой атрибут, который вы пытаетесь предсказать, используя нейронную сеть, которая определяет тип проблемы, которую вы имеете: категориальные/номинальные значения (классификация, например: классификация писем как спам/не-спам) и числовые значения (регрессия, ex : прогнозирование цен на акции). – Amro

0

Масштабировать выходы до требуемых значений или нормализовать данные тренировки вплоть до диапазона [0,1], являются очевидными решениями. Я не могу придумать какую-либо априорную причину, согласно которой масштабирование должно быть линейным (хотя, очевидно, оно хочет монотонно увеличиваться), поэтому здесь вы можете работать с функциями журнала.

Какая проблема вы работаете над тем, что у вас такие большие диапазоны?

+0

1. Нужно ли масштабировать каждый выход нейрона? Или просто выходные нейроны? 2. Если я нормализую вход, мне тоже нужно нормализовать выход? и как нормализовать выход? наряду с вводом? 3.Как я могу работать с функцией журнала? 4. Мои данные классифицируются, мне нужно обучить этот шаблон, о котором идет речь, что бы вы предложили? –

+0

Ваши входы - это то, что они есть; Я оставил бы их в покое. То, что вы пытаетесь сделать, соответствует диапазону выходов, предоставляемых вашими выходными нейронами, к значениям, которые диктуют ваши учебные данные. Это можно сделать либо путем изменения передаточных функций выходных нейронов напрямую, либо путем их масштабирования по мере необходимости, либо путем масштабирования выходов, определяемых данными тренировки. В некотором смысле все они эквивалентны. Нейроны остаются одни. – Novak

Смежные вопросы