2013-03-26 3 views
1

У меня есть простая задача, чтобы классифицировать людей по их высоте и длине волос до категории MAN или WOMAN, используя нейронную сеть. Также научите его шаблону примерами, а затем используйте его для классификации самостоятельно.Как определить порог срабатывания нейронов в нейронных сетях?

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

Я знаю, что каждый нейрон делит область на два подрайона, в основном именно поэтому здесь используется P = w0 + w1 * x1 + w2 * x2 + ... + wn * xn (веса просто перемещают линию если мы рассмотрим геометрическое представление).

Я понимаю, что каждая эпоха должна изменять весы, чтобы приблизиться к правильному результату, но я никогда не программировал ее, и я безнадежно начинаю.

Как я могу продолжить, что означает: Как я могу определить порог и как мне обращаться с входами?

Это не домашнее задание, а задача для тех, кто был заинтересован. Я, и я хотел бы это понять.

+0

Я просто укрепил свой вопрос, но я не уверен в использовании «эпохи». Вы имеете в виду [epoché] (http://en.wikipedia.org/wiki/Epoch%C3%A9)? – joce

ответ

2

Похоже, вы имеете дело с простым Перцептроном с функцией активации порога. Посмотрите на this question. Так как вы используете нейрон со смещением (w0), вы должны установить порог в 0.

Затем вы просто берете вывод своей сети и сравниваете ее с 0, так что вы, например, класс вывода 1, если x < 0 и класс 2, если x> 0. Вы могли бы моделировать случай x = 0 как «нечеткий».

Для изучения веса вам необходимо применить Delta Learning Rule, который может быть реализован очень легко. Но будьте осторожны: персептрон с простой функцией активации порога может быть только правильным, если ваши данные линейно отделимы. Если у вас более сложные данные, вам понадобится многослойный персептрон и нелинейная активационная функция, например, функция логистической сигмоиды.

Подробнее см. Geoffrey Hintons Coursera Course, Lecture 2.

1

В последнее время я работаю с машинным обучением (но я не эксперт), но вы должны посмотреть на структуру Accord.NET. Он содержит все общие алгоритмы обучения компьютера из коробки. Таким образом, легко взять существующие образцы и изменить его вместо того, чтобы начинать с нуля. Кроме того, разработка рамок очень полезна в форуме, доступном на той же странице.

С доступными образцами вы также можете обнаружить что-то лучшее, чем нейронная сеть, например, Kernel Support Vector Machine. Если вы придерживаетесь нейронной сети, повеселитесь, изменяя все разные переменные, а при попытке и ошибке вы поймете, как это работает.

Удачи!

+1

Извините, но не совсем верно, что SVM обычно лучше, чем нейронные сети. Особенно последние разработки, касающиеся Deep Neural Networks, превосходят существующие решения на основе SVM. Взгляните на записи [MNIST records] (http://yann.lecun.com/exdb/mnist/), посмотрите таблицу Convolution Net и таблицу SVM. Чтобы указать один пример, нет необходимости делать предварительную обработку для DNN, что необходимо для SVM. Кроме того, вам необходимо также точно настроить SVM: вам нужно выбрать правильную функцию ядра, и вам нужно установить параметры для вашей трубки epsilon. – schreon

+1

Как я уже сказал, я не эксперт, я просто пытался помочь. Я предположил, что вы МОЖЕТЕ обнаружить что-то лучше, чем нейронная сеть, все зависит от самой проблемы. По моему собственному опыту, KSVM всегда легче настраивать и брал МНОГО меньше ресурсов, чем нейронная сеть. Если вы заинтересованы в глубоком обучении, Accord.NET также имеет пример с этим. –

0

Поскольку вы сказали:

Я знаю, что каждый нейрон делит область на две подобласти

&

веса просто перемещая линию, если мы рассмотрим геометрическое представление

Я думаю, вы хотите использовать нейронные сети perseptron или ADALINE. Эти нейронные сети могут просто классифицировать линейные разделимые шаблоны. поскольку ваши входные данные сложны, лучше использовать многослойную нелинейную нейронную сеть. (мое предложение представляет собой двухслойную нейронную сеть с функцией активации tanh). Для обучения этой сети вы должны использовать алгоритм обратного распространения.

Для ответа на

, как я должен иметь дело с входами?

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

Если вы имеете дело с только высотой и длиной волос я предлагаю разделить высоты и длину в некоторых классах (например, 160 см-165 см, 165 см-170 см & и т. д.), и для каждого из этих классов установите входной нейрон. затем поместите скрытый слой после всех классов, связанных с высотами, и еще один скрытый слой после всех классов, связанных с длиной волос (функция активации tanh). Количество нейронов в этих двух скрытых слоях определяется на основании количества учебных случаев. , затем возьмите эти два скрытых слоя и отправьте их на уровень агрегирования с 1 выходным нейроном.