2017-10-14 3 views
1

Wenn Sie einen Kunden Keras Optimizer erstellen, ist die Arbeitspferd-Funktion Optimizer.get_updates(). Ich war in der Lage, einen Fixed-Step-Optimierer zu erstellen, aber ich bin mir nicht sicher, wie Dinge zu tun sind, wie z. B. Durchschnittswerte, bei denen ich Werte aus früheren Aufrufen der Funktion verwenden muss.Erstellen Sie Ihren eigenen Keras Optimizer

Zum Beispiel consider RMSprop. Wird der Akkumulator nicht bei jedem Aufruf der Funktion zurückgesetzt?

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

Wie wird RMSProp den laufenden Mittelwert zu tun, wenn der Akkumulator zurückgesetzt jeden Update Anruf am Anfang wird?

+1

Es war für mich auch verwirrend, als ich den Code sah, aber diese Funktion wird nicht bei jedem Update aufgerufen, es wird einmal aufgerufen, um das Diagramm zu erstellen, siehe https://github.com/fchollet/keras/issues/5125 –

+1

Auch die gleiche Frage als das Problem https://stackoverflow.com/questions/41787873/how-adagrad-wroks-in-keras-what-does-self-weights-mean-in-keras-optimizer?rq=1 –

Antwort

1

Sie haben Recht, dass der Akkumulator bei jedem Aufruf get_updates auf Null gesetzt wird. Diese Funktion wird jedoch nur einmal aufgerufen, während der Berechnungsgraph erstellt wird.

Was verwirrend ist, ist die Verwendung von symbolischen Funktionen. Als Keras symbolische Darstellungen verwendet, was in get_updates passiert ist, dass ein symbolische Update erzeugt wird, in Zeile 237-238:

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

Diese Updates dann während Gradientenabfallsaktualisierung Durchführung verwendet werden. Symbolisch heißt es, dassauf new_a gesetzt wird, die den vorherigen Wert von a berücksichtigt, wenn Sie Updates wie Updates zu einer freigegebenen Variablen aufrufen. Dieser Teil macht den laufenden Durchschnittsakkumulator.

Beachten Sie, dass mehrere Aktualisierungen erstellt werden, eine für jeden Parameter, und dann werden diese symbolischen Aktualisierungen in einer Liste gesammelt, die an den Aufrufer zurückgegeben wird.

+0

Es macht jetzt alles Sinn. Danke vielmals! –

Verwandte Themen