Ich folge dem Tensorflow Mnist-Tutorial ( https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py ).
Das Tutorial verwendet tf.train.Optimizer.minimize
(speziell tf.train.GradientDescentOptimizer
). Ich sehe keine Argumente, die irgendwo übergeben werden, um Farbverläufe zu definieren.
Verwendet der Tensorfluss standardmäßig eine numerische Differenzierung?
Gibt es eine Möglichkeit, Farbverläufe so zu übergeben, wie Sie es können scipy.optimize.minimize
?
quelle
Es verwendet die automatische Differenzierung. Wo es Kettenregeln verwendet und im Diagramm Backword verwendet, um Farbverläufe zuzuweisen.
Nehmen wir an, wir haben einen Tensor C Dieser Tensor C wurde nach einer Reihe von Operationen erstellt. Nehmen wir an, wir addieren, multiplizieren, durchlaufen eine Nichtlinearität usw.
Wenn dieses C also von einem Satz von Tensoren abhängt, die Xk genannt werden, müssen wir die Gradienten erhalten
Tensorflow verfolgt immer den Betriebsweg. Ich meine das sequentielle Verhalten der Knoten und wie Daten zwischen ihnen fließen. Das macht die Grafik
Wenn wir die Ableitungen der Kosten für X-Eingaben erhalten müssen, wird zuerst der Pfad von der X-Eingabe zu den Kosten geladen, indem der Graph erweitert wird.
Dann beginnt es in der Reihenfolge der Flüsse. Verteilen Sie dann die Farbverläufe mit der Kettenregel. (Wie Backpropagation)
Wenn Sie die Quellcodes lesen, die zu tf.gradients () gehören, können Sie feststellen, dass Tensorflow diesen Gradientenverteilungsteil auf nette Weise ausgeführt hat.
Während der Rückverfolgung von tf mit dem Graphen interagiert TF im Backword-Pass auf verschiedene Knoten. Innerhalb dieser Knoten gibt es Operationen, die wir (ops) matmal, softmax, relu, batch_normalization usw. nennen. Wir laden diese ops also automatisch in die Graph
Dieser neue Knoten bildet die partielle Ableitung der Operationen. get_gradient ()
Lassen Sie uns ein wenig über diese neu hinzugefügten Knoten sprechen
Innerhalb dieser Knoten fügen wir zwei Dinge hinzu: 1. Ableitung, die wir berechnet haben) 2. Auch die Eingaben für den entsprechenden Opp im Vorwärtsdurchlauf
Nach der Kettenregel können wir also berechnen
Das ist also dasselbe wie bei einer Backword-API
Tensorflow denkt also immer über die Reihenfolge des Graphen nach, um eine automatische Differenzierung durchzuführen
Da wir wissen, dass wir Vorwärtsdurchlaufvariablen benötigen, um die Gradienten zu berechnen, müssen wir Zwischenwerte auch in Tensoren speichern. Dies kann den Speicher reduzieren. Für viele Operationen wissen wir, wie man Gradienten berechnet und verteilt.
quelle