Wie effektiv bewerben Gradienten-Clipping in Tensor-Flow?

In Anbetracht des Beispielcodes .

Ich würde gerne wissen, wie man Gradient Clipping auf diesem Netzwerk auf der RNN, wo es eine Möglichkeit der explodierenden Gradienten.

tf.clip_by_value(t, clip_value_min, clip_value_max, name=None) 

Dies ist ein Beispiel, das verwendet werden könnte, aber wo finde ich das vor? In der def von RNN

  lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0) # Split data because rnn cell needs a list of inputs for the RNN inner loop _X = tf.split(0, n_steps, _X) # n_steps tf.clip_by_value(_X, -1, 1, name=None) 

Aber das macht keinen Sinn, da der Tensor _X der Eingang ist und nicht der Grad, was zu beschneiden ist?

Muss ich meinen eigenen Optimierer dafür definieren oder gibt es eine einfachere Option?

3 Solutions collect form web for “Wie effektiv bewerben Gradienten-Clipping in Tensor-Flow?”

Gradient Clipping muss nach der Berechnung der Farbverläufe passieren, aber vor der Anwendung, um die Parameter des Modells zu aktualisieren. In Ihrem Beispiel werden diese beiden Dinge von der Methode AdamOptimizer.minimize() .

Um Ihre Farbverläufe zu klammern, müssen Sie sie explizit berechnen, verkleinern und anwenden, wie in diesem Abschnitt in der API-Dokumentation von TensorFlow beschrieben. Speziell müssen Sie den Aufruf der minimize() Methode mit so etwas wie dem folgenden ersetzen:

 optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate) gvs = optimizer.compute_gradients(cost) capped_gvs = [(tf.clip_by_value(grad, -1., 1.), var) for grad, var in gvs] train_op = optimizer.apply_gradients(capped_gvs) 

Trotz allem, was populär zu sein scheint, möchten Sie wahrscheinlich den ganzen Gradienten durch seine globale Norm klammern:

 optimizer = tf.train.AdamOptimizer(1e-3) gradients, variables = zip(*optimizer.compute_gradients(loss)) gradients, _ = tf.clip_by_global_norm(gradients, 5.0) optimize = optimizer.apply_gradients(zip(gradients, variables)) 

Das Beschneiden jeder Gradientenmatrix verändert individuell ihre relative Skala, ist aber auch möglich:

 optimizer = tf.train.AdamOptimizer(1e-3) gradients, variables = zip(*optimizer.compute_gradients(loss)) gradients = [ None if gradient is None else tf.clip_by_norm(gradient, 5.0) for gradient in gradients] optimize = optimizer.apply_gradients(zip(gradients, variables)) 

Dies ist in der Dokumentation tatsächlich richtig erklärt. :

Calling minimize () kümmert sich um die Berechnung der Gradienten und die Anwendung auf die Variablen. Wenn du die Steigungen vor dem Anwenden verarbeiten willst, kannst du stattdessen den Optimierer in drei Schritten verwenden:

  • Berechnen Sie die Gradienten mit compute_gradients ().
  • Verarbeite die Steigungen nach Belieben.
  • Wenden Sie die bearbeiteten Gradienten mit apply_gradients () an.

Und im Beispiel geben sie diese 3 Schritte:

 # Create an optimizer. opt = GradientDescentOptimizer(learning_rate=0.1) # Compute the gradients for a list of variables. grads_and_vars = opt.compute_gradients(loss, <list of variables>) # grads_and_vars is a list of tuples (gradient, variable). Do whatever you # need to the 'gradient' part, for example cap them, etc. capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars] # Ask the optimizer to apply the capped gradients. opt.apply_gradients(capped_grads_and_vars) 

Hier ist MyCapper eine beliebige Funktion, die deinen Farbverlauf MyCapper . Die Liste der nützlichen Funktionen (außer tf.clip_by_value() ) ist hier .

  • TensorFlow: alle Staaten aus einem RNN bekommen
  • Bauen Sie benutzerdefinierte Caffe Schicht in Python
  • Finden Sie die richtigen Parameter für neuronales Netzwerk für Pong-Spiel
  • Ist es möglich, den objektiven Funktionswert bei jedem Trainingsschritt zu erhalten?
  • Warum ist es möglich, einen geringen Verlust zu haben, aber auch eine sehr geringe Genauigkeit in einem faszinierenden neuronalen Netzwerk?
  • Tensorflow Slim: TypeError: Erwartete int32, bekannte Liste mit Tensoren vom Typ '_Message' stattdessen
  • Hinzufügen von mehreren Ebenen zu TensorFlow verursacht Verlustfunktion zu Nan werden
  • Verstehen des LSTM-Modells mit Tensorflow für die Stimmungsanalyse
  • Was ist eine "Python" `Schicht in caffe?
  • TensorFlow ValueError: Kann den Wert der Form (64, 64, 3) nicht für den Tensor u'Placeholder: 0 ', der die Form' (?, 64, 64, 3) 'hat,
  • Verstehen Tensorflow LSTM Modelle Eingabe?
  • Python ist die beste Programmiersprache der Welt.