keras 基本优化器如何工作?
How does keras basic optimizer works?
这是来自 keras
(source)
SGD
的 get_updates
代码的一部分
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
变量是一个零张量列表。 for loop
中的每个m
都是一个零张量,形状为p
。然后 self.momentum * m
,在循环的第一行,只是一个标量乘以零张量,结果是零张量。
问题
我在这里错过了什么?
谢谢!
是 - 在此循环的第一次迭代中,m
等于 0。但随后它被此行中的当前 v
值更新:
self.updates.append(K.update(m, v))
因此在下一次迭代中您将拥有:
v = self.momentum * old_velocity - lr * g # velocity
其中 old_velocity
是 v
的先前值。
这是来自 keras
(source)
SGD
的 get_updates
代码的一部分
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
变量是一个零张量列表。 for loop
中的每个m
都是一个零张量,形状为p
。然后 self.momentum * m
,在循环的第一行,只是一个标量乘以零张量,结果是零张量。
问题
我在这里错过了什么? 谢谢!
是 - 在此循环的第一次迭代中,m
等于 0。但随后它被此行中的当前 v
值更新:
self.updates.append(K.update(m, v))
因此在下一次迭代中您将拥有:
v = self.momentum * old_velocity - lr * g # velocity
其中 old_velocity
是 v
的先前值。