创建客户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
如何处理运行平均值?
答案 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
的先前值。这部分是运行平均累加器。
请注意,会构建多个更新,每个参数对应一个参数,然后将这些符号更新收集到返回给调用方的列表中。