ANN - инициализация скорости
Пытаясь реализовать алгоритмы обучения нейронной сети, я натолкнулся на различные концепции, включая концепцию градиентного спуска, которая пытается имитировать шарик, катящийся по склону, и скорости и импульса, чтобы лучше моделировать катящийся шарик.
Я инициализировал мой weights
, weight_deltas
, а также weight_velocities
таким образом:
sizes = [2, 3, 1]
momentum_coefficient = 0.5
weights = [ 2 * np.random.random((a, b)) - 1 for a, b in zip(sizes[:-1], sizes[1:]) ]
weight_velocities = [ np.ones(w.shape) for w in weights ]
weight_deltas = [ np.zeros(w.shape) for w in weights ]
После вычисления дельт (производной функции стоимости по весам, я обновил вес таким образом:
for l in xrange(sizes - 1):
weight_velocities[l] = (momentum_factor * weight_velocities[l]) - weight_deltas[l]
weights[l] += weight_velocities[l]
я использовал np.zeros
чтобы инициализировать мои скорости, и я смог получить точность до 80% (для определенного набора данных). Но когда я инициализировал с np.ones
Я не мог получить точность до 20%. Я использую ones
, но я не могу понять, почему zeros
работает. И есть также random
метод из numpy
,
Какой рекомендуемый подход для инициализации weight_velocities
? Обратите внимание, что я намеренно исключил единицы смещения и скорость обучения, и я import
ИНГ numpy as np
,