Согласно этому руководству, с Python
и Numpy
я хотите обучить MNIST
набор данных нейронной сети, которая может распознавать рукописные цифры. Я понимаю логику, но у меня есть проблема прямо сейчас.
В этом учебном примере тестовым случаем был AND
логический вентиль, и из-за небольшого объема данных он работает нормально. Но я использую базу данных MNIST
, и каждое изображение имеет размерность 28*28
, и когда я конвертирую каждое из них в вектор, у меня есть матрица N*784
. И если у меня есть матрица 784*1
как weight matrix
, когда я умножаю ее на входную матрицу, результирующие числа будут очень маленькими или очень большими числами (отрицательными или положительными), и поскольку я использую функцию активации Sigmoid
, все мои данные разделены в два раздела, 1 и 0 в первом цикле обучения, но мне нужны небольшие числа, которые медленно сходятся.
например, я получаю эти числа после умножения: -569.87541502
, 218.62477264
и первое из них равно 0 в функции активации Sigmoid
, а второе равно 1, и нет места для обучения и сходимости. Все это из-за большого количества данных, суммирование которых приводит к большим или очень маленьким числам.
Я использую этот трюк для создания очень малых весов, чем в оригинальном уроке, но я получаю те же результаты (я думал, что это небольшие числа, их сумма не может быть очень большой, но я получаю те же результаты):
syn0 = (2*np.random.random((784,10))-1)*(0.00000005-0.00000001) + 0.00000001
Я не знаю, как я могу преодолеть это.
sqrt(6./(in_dims+out_dims))
26.11.2016syn0 /= 28.
, простейшую нормализацию. 26.11.2016