- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在关注 this tutorial用于实现反向传播算法。但是,我一直坚持为该算法实现动量。
没有Momentum,这是权重更新方法的代码:
def update_weights(network, row, l_rate):
for i in range(len(network)):
inputs = row[:-1]
if i != 0:
inputs = [neuron['output'] for neuron in network[i - 1]]
for neuron in network[i]:
for j in range(len(inputs)):
neuron['weights'][j] += l_rate * neuron['delta'] * inputs[j]
neuron['weights'][-1] += l_rate * neuron['delta']
下面是我的实现:
def updateWeights(network, row, l_rate, momentum=0.5):
for i in range(len(network)):
inputs = row[:-1]
if i != 0:
inputs = [neuron['output'] for neuron in network[i-1]]
for neuron in network[i]:
for j in range(len(inputs)):
previous_weight = neuron['weights'][j]
neuron['weights'][j] += l_rate * neuron['delta'] * inputs[j] + momentum * previous_weight
previous_weight = neuron['weights'][-1]
neuron['weights'][-1] += l_rate * neuron['delta'] + momentum * previous_weight
这给了我一个 Mathoverflow 错误,因为权重在多个时期内呈指数级变得太大。我相信我的 previous_weight
逻辑对于更新是错误的。
最佳答案
我给你一个提示。您在实现中将 momentum
乘以 previous_weight
,这是同一步骤中网络的另一个参数。这显然很快就会爆炸。
你应该做的是记住整个更新向量, l_rate * neuron['delta'] * inputs[j]
,在之前的反向传播步骤上,并将其相加。它可能看起来像这样:
velocity[j] = l_rate * neuron['delta'] * inputs[j] + momentum * velocity[j]
neuron['weights'][j] += velocity[j]
... 其中 velocity
是一个与 network
长度相同的数组,定义的范围比 updateWeights
大,并用零初始化.参见 this post了解详情。
关于python - 动量反向传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47211478/
如何计算滚动事件的滚动动量? 我知道在结束滚动的开始处必须有两个时间戳。还必须有一个“轴变化”变量,它基本上是无惯性滚动的量。 这是我当前负责结束滚动的代码: if ((type == kMXTEnd
这个问题在这里已经有了答案: How do I give this spaceship acceleration? (3 个答案) 关闭 5 年前。 有一个非常小的类似小行星的游戏片段,我正在使用不
我目前正在试验 THREE.JS 项目,并使用鼠标滚轮滚动事件从 0 转到 1。 但是,我希望实现与您在此链接 playdoh by merci Michael 中看到的相同势头。 目前,这就是我迄今
我正在尝试实现列表对象的动态滚动,但我在根据速度确定要应用的摩擦量(持续时间)时遇到问题。 我的 applyFriction() 方法根据持续时间属性平均降低滚动对象的速度。然而,对每个 Action
几个月来,我一直在努力解决这个问题,并且用尽了我能想到的一切。 我想要实现的是:http://blue.bluestudios.kenzomedia.com/v0.7/ (部分逻辑借鉴了iScroll
我有一个标准的前馈反向传播神经网络,我想训练它来识别蓝色的球。我有 30 张图像,其中 20 张是球的,10 张是没有球的,我的第一个问题是这是否足够,我假设拥有更多比更少更好,但很高兴知道是否有最少
有没有办法在 Google map V3 上禁用拖动惯性?看起来它应该是一个 MapOption,但我找不到任何方法来做到这一点。 最佳答案 我今天遇到了同样的问题,一些自定义 Div 漂浮在 map
当您创建 RMSPRop 优化器时,它会要求提供动量值。这个势头是什么?是内斯特洛夫还是另一个?如何在 tf 中使用 Nesterov 动量和 RMSProp? 这里的文档字符串中有一个公式: htt
我有一个 SGD 求解器: base_lr: 1e-2 lr_policy: "step" gamma: 0.1 stepsize: 10000 max_iter: 300000
我是一名优秀的程序员,十分优秀!