3

这是来自( source )的部分get_updates代码SGDkeras

moments = [K.zeros(shape) for shape in shapes]
self.weights = [self.iterations] + moments
for p, g, m in zip(params, grads, moments):
    v = self.momentum * m - lr * g  # velocity
    self.updates.append(K.update(m, v))

观察:

因为moments变量是一个零张量列表。m中的每for loop一个都是形状为 的零张量p。然后self.momentum * m,在循环的第一行,只是一个标量乘以零张量,结果是零张量。

问题

我在这里想念什么?谢谢!

4

1 回答 1

2

是的 - 在此循环的第一次迭代期间m等于 0。但随后它被v此行中的当前值更新:

self.updates.append(K.update(m, v))

因此,在下一次迭代中,您将拥有:

v = self.momentum * old_velocity - lr * g  # velocity

其中old_velocity是 的先前值v

于 2017-07-04T10:09:42.250 回答