【问题标题】:How does keras basic optimizer works?keras 基本优化器是如何工作的?
【发布时间】:2017-07-04 08:24:06
【问题描述】:

这是来自SGDget_updates 代码的一部分,来自keras(source)

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,在循环的第一行,只是一个标量乘以零张量,结果是零张量。

问题

我在这里缺少什么? 谢谢!

【问题讨论】:

    标签: machine-learning neural-network deep-learning keras keras-2


    【解决方案1】:

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

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

    所以在下一次迭代中,您将拥有:

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

    其中old_velocityv 的先前值。

    【讨论】:

    • 感谢您的回答。当Keras 训练功能正在运行时。它实际上从self.updates 数组中调用每个symbolic compiled 函数。由于此函数中的每个元素都是象征性的,因此它也允许保留计算的旧值。即:moments 数组实际上只声明了一次。 K.update(m,v) 包含有关 v 的完整符号信息。我做对了吗?
    • 我认为 - 是的 - 你明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多