在尝试实现神经网络训练算法时,我遇到了不同的概念,包括试图模拟滚下山坡的球的梯度下降,以及更好地模拟滚动球的速度和动量。
我初始化了我的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
。