Ради интереса, я реализовал свою собственную базовую нейронную сеть, которую я пытаюсь обучить с помощью рукописного набора данных MNIST. Я вполне уверен, что сама сеть работает.
Однако я немного озадачен тем, как ее тренировать. В настоящее время я делаю следующее:
repeat 5000 times
for training_example in 500_examples
gradient+=backprop(training_example) //sum the suggested changes in gradient for each ex
gradient/=500 //average across all examples
weights += gradient*learningRate //update the weights
... //update biases
Однако, когда я подаю изображение, я получаю ответ, который кажется, что он просто угадывает каждое число ~ {0.1, 0.1, 0.1, ....}.
Дальнейшее подтверждение этогокогда я обучаю его только двум примерам, которые являются числами 0 и 5. Ответ, независимо от того, что я кормлю (даже когда я кормлю один из примеров), равен ~{0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0}.
При обучении с одним примером(0), я получаю ожидаемый результат при кормлении в тренировочном примере (конечно, так как он просто оптимизирован, чтобы угадывать одно и то же каждый раз). ~{1.0, 0.0 ...}
Что-то не так с самой моей процедурой обучения, или мне просто нужно отладить мой код?