2016-05-16 16 views
3

Ich arbeite derzeit an wiederkehrenden neuronalen Netzen mit Lasagne/Theano.Lasagne/Theano Gradientenwerte

Während des Trainings werden Aktualisierungen mithilfe des symbolischen Farbverlaufs von Theano berechnet.

grads = theano.grad(loss_or_grads, params) 

Während der Gradient Ausdruck völlig in Ordnung, im Allgemeinen ist, bin ich auch daran interessiert, den Gradienten Werte um Training zu überwachen.

Meine Frage ist jetzt, ob es eine eingebaute Methode gibt, um auch Gradientenwerte zu bekommen, die ich bisher nicht gefunden habe, oder wenn ich es selbst machen muss.

Vielen Dank im Voraus

Antwort

5

Ich bin jede lasagne Funktion nicht bewusst, die Steigung zu bewerten, aber Sie können es selbst mit einfacher Theanos Funktion erhalten.

Sagen wir folgende Theanos Variablen:

  • inputs = Eingänge zum Netzwerk
  • targets = Ziel Ausgänge des Netzes
  • loss = Wert der Verlustfunktion, definiert als eine Funktion von Netzwerkausgänge und targets
  • l_hid = Wiederholte Schicht des Netzwerks, Typ lasagne.layers.RecurrentLayer

Angenommen, wir interessieren uns für die Steigung der Verlustfunktion w.r.t. Die wiederkehrenden Gewicht:

grad = theano.grad(loss, l_hid.W_hid_to_hid) 

Definieren eine Theanos Funktion einen numerischen Wert für die Gradienten

get_grad = theano.function([inputs, targets], grad) 

Nun zu erhalten, rufen nur get_grad für jeden Wert der Eingänge und Ziele (beispielsweise die aktuelle mini). get_grad() muss nicht der Wert der Gewichtungen übergeben werden, da sie als eine gemeinsam genutzte Variable gespeichert sind.