2

在尝试实现神经网络训练算法时,我遇到了不同的概念,包括试图模拟滚下山坡的球的梯度下降,以及更好地模拟滚动球的速度动量。

我初始化了我的weights, weight_deltasweight_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

4

0 回答 0