2

Я читаю Neural Networks and Deep Learning (первые две главы), и я пытаюсь следовать и строить свой собственный ANN для классификации цифр из набора данных MNIST.MNIST - Обучение застряло

Я уже несколько дней царапаю голову, так как моя реализация достигает максимума ~ 57% при классификации цифр из тестового набора (около 5734/10000) после 10 эпох (точность для тренировочного набора стагнирует после десятая эпоха, а точность для тестового набора, по-видимому, ухудшается из-за переустановки).

Я использую почти ту же конфигурацию, что и в книге: 2-х слойный ANN-интерфейс (784-30-10) со всеми слоями, полностью подключенными; стандартные сигмоидные функции активации; квадратичная функция стоимости; весы инициализируются одинаково (взяты из гауссовского распределения со средним 0 и стандартным отклонением 1) Единственные различия в том, что я использую онлайн-обучение вместо пакетного/мини-пакетного обучения и скорость обучения 1,0 вместо 3.0 (Я пробовал мини-пакетное обучение + скорость обучения 3,0, хотя)

И все же моя реализация не проходит 60% процентиля после множества эпох, где, как и в книге, ANN идет выше% 90 сразу после первая эпоха с практически такой же конфигурацией. Сначала я перепутались реализации алгоритма обратного распространения, но после реализовав обратного распространения по-разному в три раза, с точно такими же результатами в каждом переопределённой, я тупик ...

Пример из результатов алгоритм обратного распространения является Производство:

С более простой сетью с обратной связью с аналогичной конфигурацией, упомянутой выше (онлайн-обучение + скорость обучения 1,0): 3 входных нейрона, 2 скрытых нейрона и 1 выходный нейрон.

Начальные веса инициализируются следующим образом:

Layer #0 (3 neurons) 

Layer #1 (2 neurons) 
    - Neuron #1: weights=[0.1, 0.15, 0.2] bias=0.25 
    - Neuron #2: weights=[0.3, 0.35, 0.4] bias=0.45 

Layer #2 (1 neuron) 
    - Neuron #1: weights=[0.5, 0.55] bias=0.6 

Учитывая ввод [0,0, 0,5, 1,0], выход 0,78900331. Backpropagating за тот же вход и с требуемым выходом 1,0 дает следующие частные производные (с.в. = производная вес WRT, дБ = производная смещение WRT):

Layer #0 (3 neurons) 

Layer #1 (2 neurons) 
    - Neuron #1: dw=[0, 0.0066968054, 0.013393611] db=0.013393611 
    - Neuron #2: dw=[0, 0.0061298212, 0.012259642] db=0.012259642 

Layer #2 (1 neuron) 
    - Neuron #1: dw=[0.072069918, 0.084415339] db=0.11470326 

Обновление сети с этими частными производными дает исправленный выход значение 0,74862305.


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

Неужели кто-либо сталкивался с проблемой MNIST, когда-либо сталкивался с этой проблемой? Даже предложения по вещам, которые я должен проверить, помогут, так как я действительно потерялся здесь.

ответ

3

Doh ..

Оказывается, не было ничего плохого в моей реализации обратного распространения ...

Проблема заключалась в том, что я прочитал изображения в подписанном полукокса (в C++) массива, а значения пикселей разливалась , так что, когда я разделил на 255.0 для нормализации входных векторов в диапазоне 0.0-1.0, я действительно получил отрицательные значения ...; -;

Так что в основном я потратил несколько дней на отладку и повторил то же самое, когда проблема была где-то в другом месте.

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