2

Имеется многослойный полносвязный перцептрон с одним скрытым слоем. Функция активации - сигмоидальная. Обучаю методом обратного распространения ошибки. Её предназначение - распознавать рукописные цифры от 0 до 9. Количество входных данных 225(изображения цифр 15х15), количество скрытых слоев 50. Тренировочная выборка состоит из 500 изображений - по 50 вариаций на каждую цифру.

После обучения на тренировочной выборке средняя ошибка составляет около 5% и достигается довольно быстро. Но! Если посмотреть на самую минимальную ошибку и на самую максимальную из всех тренировочных примеров, то их разница составляет где-то 50%. То есть при тренировке минимальная ошибка постоянно стремиться к 0, а максимальная колебается в пределах 40 - 60%.

Пытался настраивать значения количества скрытых нейронов, скорость обучения и момент, но это не принесло особо позитивных результатов.

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

Получается, что на некоторых изображения оно тренируется с ошибкой 0.0001%, а на некоторых 50% и больше. Что за бред?

С чем это может быть связано?

Kromster
  • 13,809
RealPeha
  • 411

1 Answers1

1
  1. sigmoid используется для задач бинарной классификации (два класса, например является ли число на картинке нулем - Да/Нет), а у вас на выходе 10 классов (десять цифр), поэтому надо использовать softmax в качестве функции активации.
  2. насколько мне известно многослойный перцептрон - не самый лучший алгоритм для распознавания картинок/образов. Для таких задач обычно используют сверточные нейронные сети.
MaxU - stand with Ukraine
  • 149,321
  • 12
  • 59
  • 132
  • У меня 4 выхода, которые описывают цифру в виде двоичного числа – RealPeha Jun 25 '18 at 21:00
  • если у вас на выходе 4 числа (класса), то и предсказываете вы в итоге 4 числа. Иначе как вы их различать будете? – MaxU - stand with Ukraine Jun 25 '18 at 21:02
  • выход [0, 0, 0, 0] равняеться нулю, [0, 0, 0, 1] - один [0, 0, 1, 0] - два и так далее. Получается до 15, но при обучении я использую только цифры до 9, то есть до [1, 0, 0, 1] – RealPeha Jun 25 '18 at 21:06
  • @MaxU ТС имеет в виду следующую модель. Положим, выход такой: 0.48 - 0.3 - 0.58 - 0.62 -> 0 - 0 - 1 - 1 -> 3 // Пока я писал, это уже описал сам ТС хД – Kir_Antipov Jun 25 '18 at 21:07
  • @RealPeha, это потому что вы неправильно построили модель. Если сделать правильно то на выходе будет вектор вероятностей из десяти элементов - индекс элемента с максимальной вероятностью будет представлять цифру – MaxU - stand with Ukraine Jun 25 '18 at 21:09
  • @MaxU, а если уже невозможно переделать нейросеть под софтмакс функцию активации? Иначе эта проблема никак не решается? – RealPeha Jun 25 '18 at 21:25
  • грубо говоря, sigmoid - хорош для того чтобы предсказывать ответ Да/Нет. Поэтому для задач мультиклассовой классификации используют softmax. Подумайте подходит ли вам ответ Да/Нет для предсказания 10 различных цифр? ;-) – MaxU - stand with Ukraine Jun 25 '18 at 21:43