创建自己的Keras Optimizer

时间:2017-10-14 11:29:18

标签: keras

创建客户Keras ['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']时,主力函数为Optimizer。我能够创建一个固定步骤优化器,但我不知道如何处理诸如运行平均值之类的事情,我必须使用从先前函数调用计算的值。

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

Optimizer.get_updates()

在每次更新通话开始时重置累加器时,accumulators = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] self.weights = accumulators 如何处理运行平均值?

1 个答案:

答案 0 :(得分:1)

在每次get_updates通话中,累加器设置为零是正确的。但是这个函数只调用一次,而计算图就构建了。

令人困惑的是使用符号功能。由于Keras使用符号表示,get_updates中发生的事情是生成符号更新,在第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的先前值。这部分是运行平均累加器。

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