2015-02-17 4 views
2

Я пытаюсь внедрить нейронные сети обратного распространения в течение некоторого времени, и я сталкиваюсь с проблемами раз за разом. До сих пор прогресс в том, что моя нейронная сеть отлично работает для XOR, AND и OR.Проблема с многоклеточной нейронной сетью

Следующее изображение показывает обучение моей нейронной сети для XOR более 100000 итераций и, похоже, сходится хорошо. Для этого я имел 2 входных нейронов и один выходной нейрон со скрытым слоем с 2 нейронов она [хотя 1 было бы достаточно] enter image description here

сейчас продвигается вперед я тренировался в той же сети два различать координаты в плоскости XY на две классы с одной и той же структурой 2 входных нейрона и 1 выходного нейрона и один скрытого слоя с двумя нейронами: Dataset enter image description here

в течение следующего я обучен его только, но с 2 выходными нейронов и сохранением остальной частью структуры два классов то же самое, и на этот раз потребовалось много времени, чтобы сходиться, но это произошло. enter image description here Но теперь я увеличился до трех классов; класс А будет 100 и класс B будет 010 и класса C будет 001, но теперь, когда я обучать его, то он никогда не сходится и дает мне следующий результат для данных, приведенных ниже: enter image description here enter image description here

Он никогда не кажется сходиться. И я наблюдал эту картину этого, если я увеличиваю количество нейронов в моем выходном слое, частота ошибок увеличивается как угодно? Могу ли я направить меня туда, где я ошибаюсь?

+0

Что такое уровни логики выходных нейронов? 0-0,3 для зеленого, 0,3-0,7 для синего, 0,7-1,0 для красного? –

+0

Нет!на самом деле мой выходной слой имеет 3 нейрона, поэтому, если он классифицирован как класс А, тогда должен быть запущен первый нейрон нейтрия выходного уровня, и полный выход с уровня будет 100, и аналогично, если класс b, то полный выход будет 010 и т. д. –

+0

Что такое сумма этих результатов? –

ответ

5

Если вы переходите от классификации двоичных объектов к классификации многоклассов, вам придется обобщить алгоритм backpropagation, чтобы правильно обрабатывать более двух классов.

Основные отличия от бинарной классификации является то, что изменения обновления для:

update

с: быть новым счетом, где выбирается аргумент у (выход)

y

что дает наивысший балл для признаков, умноженных на весовой вектор w. Эта стратегия называется one-vs.-rest. Написанное псевдокод (from here):

pseudocode

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

Ваша архитектура, имеющая 1 бинарный выходной узел на класс, отлично подходит, если у вас есть несколько атрибутов independent, которыми вы классифицируете. В противном случае вам следует рассмотреть возможность использования выходного уровня softmax (см. here для примера реализации). Использование активации softmax в выходном слое преобразует ваши исходные значения в задние вероятности (в отличие от двоичных выходов для каждого класса). Поскольку это дает вам определенную уверенность, это также дает вам более глубокое понимание.

+3

Я ничего не знаю о нейронных сетях, но это крутой ответ. – Luminous

+0

@ Luminous Спасибо! – runDOSrun

+0

благодарит за ответ! но я буду много изучать, чтобы понять то, что вы здесь сделали, а затем перейти к реализации тех изменений, которые вы предложили .. но по-настоящему оцените все ресурсы, которые вы включили :) –

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