2

Я пытаюсь сделать программу распознавания цифр. Я буду питать белое/черное изображение цифры, и мой выходной слой будет стрелять соответствующей цифрой (один нейрон должен стрелять из 0 -> 9 нейронов в выходном слое). Я закончил внедрение двухмерной сети нейронов BackPropagation. Модные размеры топологии [5] [3] -> [3] [3] ->1 [10]. Таким образом, это один двумерный входной слой, один двумерный скрытый слой и один одномерный выходной слой. Однако я получаю странные и неправильные результаты (средняя ошибка и выходные значения).BackPropagation Neuron Network Approach - Design

Отладка на данном этапе отнимает много времени. Поэтому я хотел бы услышать, если это правильный дизайн, поэтому я продолжаю отладку. Вот шаги потока моей реализации:

  • построения сети: Один Bias на каждом уровне за исключением выходного слоя (без смещения). Выходное значение Bias всегда равно 1.0, однако его веса соединений обновляются на каждом проходе, как и все другие нейроны в сети. Все весовые коэффициенты 0.000 -> 1.000 (без отрицательных эффектов)

  • Получить входные данные (0 | ИЛИ | 1) и установить n-е значение в качестве n-го значения выходного сигнала нейрона во входном слое.

  • упреждения: На каждый нейрон «п» в каждом слое (за исключением входного слоя):

    • Получить результат SUM (Output Value * Подключение веса) связного Нейроны из предыдущего слоя в этом направлении nth Neuron.
    • Получить TanHyperbolic - передаточная функция - этой суммы в качестве результатов
    • Набор результатов в качестве выходного значения этого п-й Neuron
  • Получить результаты: Возьмите выходные значения нейронов в выходном слое

  • обратного распространения:

    • Вычислить Ошибка сети: на выходном слое, получить SUM Нейроны (Целевые значения - выходные значения)^2. Разделите этот SUM на размер выходного слоя. Получите его SquareRoot в качестве результата. Вычислить среднюю ошибку = (OldAverageError * SmoothingFactor * Result)/(SmoothingFactor + 1.00)
    • Расчет градиентов выходного уровня: для каждого выходного нейрона 'n', nth Gradient = (nth Target Value - nth Output Value) * nth Output Value TanHyperbolic Производные
    • Рассчитайте градиенты скрытого слоя: для каждого Нейрона 'n' получите SUM (TanHyperbolic Derivative от веса, идущего от этого n-го Нейрона * Градиент места назначения Neuron) в качестве результатов. Назначьте (результаты * это n-ые выходные значения) в качестве градиента.
    • Обновить все веса: Начиная с скрытого слоя и обратно на входной слой, для n-го нейрона: вычислить NewDeltaWeight = (NetLearningRate * nth Output Value * nth Gradient + Momentum * OldDeltaWeight). Затем назначьте новый вес как (OldWeight + NewDeltaWeight)
  • Повторите процесс.

Вот моя попытка для цифры номер семь. Выходы - Neuron # zero и Neuron № 6. Нейрон шесть должен иметь 1 и Neuron # ноль должен переносить 0. В моих результатах все Neuron, кроме шести, имеют одинаковое значение (# zero - образец).

Sample Results

Извините за длинный пост. Если вы это знаете, вы, вероятно, знаете, насколько он крут и насколько он должен быть в одном посте. Заранее спасибо

+0

Обычно Softmax с логарифмической потерей обычно используется для активации многоклассового уровня. Для меня это не ясно, если вы делаете двоичный или многоклассовый вывод. – javadba

+0

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

+0

Конечно. У вас многоклассовый/многочленный: с 10 возможными цифрами, включающими 10 классов. Поэтому вы можете попробовать изменить функцию активации уровня вывода на softmax https://en.wikipedia.org/wiki/Softmax_function. Дайте нам знать, какой эффект это имеет. – javadba

ответ

0

Softmax с логарифмической задержкой обычно используется для активации многоклассового уровня. У вас многоклассовый/многочленный: с 10 возможными цифрами, включающими 10 классов.

Таким образом, вы можете попробовать изменить свою выходную функцию активации слоя SoftMax

http://en.wikipedia.org/wiki/Softmax_function

Artificial neural networks

In neural network simulations, the softmax function is often implemented at the final layer of a network used for classification. Such networks are then trained under a log loss (or cross-entropy) regime, giving a non-linear variant of multinomial logistic regression.

Дайте нам знать, что эффект, который имеет. -

+0

Спасибо за ваш комментарий. Q: если у меня 10 нейронов (каждый должен нести 0 или 1), все еще считается 10 классами? Действительно, 10 цифр, но каждый Нейрон имеет одно из двух возможных значений. Я взглянул на Softmax, еще один вопрос: должен ли я создать еще один класс нейронов (для переноса этого другого метода передачи), затем создать слой с результатами, содержащий такие объекты? Или же класс, но добавить вторую передаточную функцию, должно быть хорошо? Еще раз спасибо. –

+0

Просто замените функцию активации tanh softmax * только на выходном слое *. Tanh разумно для ввода скрытых и скрытых скрытых слоев. Re: 10 нейронов - да, это то, что я сказал, что у вас есть десять классов. – javadba

+0

Работа на нем. Я также решил построить XOR вместо своей цели, для тестирования/обучения/упрощения сети Neuron. спасибо –

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