2017-10-14 69 views
1

创建客户Keras Optimizer时,主要功能是Optimizer.get_updates()。我能够创建一个固定步骤优化器,但我不知道如何执行诸如运行平均值之类的操作,因为我必须使用先前调用该函数时计算出的值。创建您自己的Keras优化器

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

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

如何RMSProp做当蓄能器在每次更新通话开始时被重置的平均运行?

+1

当我看到代码时,我也感到困惑,但是这种功能在每次更新时都没有调用,只需调用一次即可构建图表,请参阅https://github.com/fchollet/keras/issues/5125 –

+1

也是同样的问题比问题https://stackoverflow.com/questions/41787873/how-adagrad-wroks-in-keras-what-does-self-weights-mean-in-keras-optimizer?rq=1 –

回答

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的前一值。这部分是运行平均累加器。

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

+0

现在一切都说得通了。非常感谢! –