2017-10-14 17 views
1

カスタマーケラスOptimizerを作成すると、workhorse関数は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コールごとにアキュムレータがゼロに設定されていることは間違いありません。しかし、この関数は1回だけ呼び出され、計算グラフは作成されます。

シンボリック関数の使用は混乱します。

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

勾配降下を行いながら、これらの更新は、次に使用される:Kerasシンボリック表現を使用するように、どのget_updatesに起こることシンボリック更新が行237から238に、生成されることです。共有変数の更新のように更新を呼び出すと、anew_aの値に設定され、前の値はaとみなされます。この部分は、移動平均アキュムレータを実行します。

パラメータごとに1つの更新が複数作成されていることに注意してください。これらのシンボリックな更新は、呼び出し元に返されるリストにまとめられます。

+0

今はすべて意味があります。どうもありがとう! –

関連する問題