На этом шаге мы рассмотрим еще один способ задания весовых коэффициентов.
Описанное на этом шаге обновление кода не является обязательным, поскольку это всего лишь простое, но популярное усовершенствование процесса инициализации весовых коэффициентов.
Начиная с 30 шага мы обсуждали различные способы подготовки данных и инициализации коэффициентов. Так вот, некоторые предпочитают несколько усовершенствованный подход к созданию случайных начальных значений весов. Для этого весовые коэффициенты выбираются из нормального распределения с центром в нуле и со стандартным отклонением, величина которого обратно пропорциональна корню квадратному из количества входящих связей на узел.
Это легко делается с помощью библиотеки numpy. Опять-таки, в отношении поиска онлайновой документации Google незаменим. Функция numpy.random.normal() описана по такому адресу: https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.random.normal.html. Она поможет нам с извлечением выборки из нормального распределения. Ее параметрами являются центр распределения, стандартное отклонение и размер массива numpy, если нам нужна матрица случайных чисел, а не одиночное число.
Обновленный код инициализации весовых коэффициентов будет выглядеть примерно так.
self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes)) self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))
Как видите, центр нормального распределения установлен здесь в 0,0. Стандартное отклонение вычисляется по количеству узлов в следующем слое с помощью функции pow(self .hnodes, -0.5), которая просто возводит количество узлов в степень -0,5. Последний параметр определяет конфигурацию массива numpy.
На следующем шаге мы рассмотрим опрос сети.