在尝试实施神经网络训练算法的过程中,我遇到了不同的概念,包括渐变下降,它试图模仿一个滚下山坡的球,以及速度和势头更好地塑造滚球。
我初始化了我的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 ]
在计算增量(成本函数相对于权重的导数)后,我updated权重:
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
的{{1}}方法。
初始化numpy
的推荐方法是什么?
请注意,我有意排除了偏见单位和学习率,我是weight_velocities
import
。