【问题标题】:Creating your own Keras Optimizer创建自己的 Keras 优化器
【发布时间】:2017-10-14 11:29:17
【问题描述】:

创建客户 Keras Optimizer 时,主力函数为 Optimizer.get_updates()。我能够创建一个固定步长优化器,但我不确定如何执行诸如运行平均值之类的事情,我必须使用从之前的函数调用计算的值。

例如,consider RMSprop。不是每次调用函数都会重置累加器吗?

accumulators = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params]
self.weights = accumulators

当累加器在每次更新调用开始时被重置时,RMSProp 如何进行运行平均?

【问题讨论】:

标签: keras


【解决方案1】:

你说得对,每次get_updates 调用时,累加器都设置为零。但是这个函数只调用一次,计算图就建好了。

令人困惑的是符号函数的使用。由于 Keras 使用符号表示,get_updates 中发生的情况是生成了 symbolic 更新,在第 237-238 行:

new_a = self.rho * a + (1. - self.rho) * K.square(g)
self.updates.append(K.update(a, new_a))

然后在执行梯度下降时使用这些更新。它象征性地表示,当您调用更新时,例如对共享变量的更新,然后将a 设置为new_a 的值,它考虑了a 的先前值。这部分做的是移动平均累加器。

请注意,会构建多个更新,每个参数一个,然后将这些符号更新收集到返回给调用者的列表中。

【讨论】:

  • 现在一切都说得通了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2018-11-26
  • 2020-11-07
  • 2010-09-13
  • 2016-01-23
  • 1970-01-01
相关资源
最近更新 更多