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 .

  • Super hohe Kosten Tensorflow
  • Hinzufügen von mehreren Ebenen zu TensorFlow verursacht Verlustfunktion zu Nan werden
  • Caffe: Wie bekomme ich die Phase einer Python-Schicht?
  • Tiefes Lernen - eine Reihe von naiven Fragen über caffe
  • Bauen Sie benutzerdefinierte Caffe Schicht in Python
  • Verstehen des LSTM-Modells mit Tensorflow für die Stimmungsanalyse
  • Wie kann ich Datenschicht (HDF5) für Training und Test im gleichen Prototxt generieren?
  • Wie man genau L1 Regularisierung der Tensorflow-Fehlerfunktion hinzufügt
  • Verwirrt über Tensorabmessungen und Chargengrößen in pytorch
  • Tensorflow Slim Debugging während des Trainings
  • Wie rekonstruieren Sie die caffe net mit pycaffe
  • Python ist die beste Programmiersprache der Welt.