Je suis le tutoriel mnist Tensorflow ( https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py ).
Le didacticiel utilise tf.train.Optimizer.minimize
(spécifiquement tf.train.GradientDescentOptimizer
). Je ne vois aucun argument transmis nulle part pour définir des gradients.
Le flux tenseur utilise-t-il la différenciation numérique par défaut?
Existe-t-il un moyen de passer des dégradés comme vous le pouvez avec scipy.optimize.minimize
?
la source
Il utilise la différenciation automatique. Où il utilise la règle de chaîne et retourne dans le graphique en attribuant des dégradés.
Disons que nous avons un tenseur C Ce tenseur C a fait après une série d'opérations Disons en ajoutant, en multipliant, en passant par une certaine non-linéarité, etc.
Donc, si ce C dépend d'un ensemble de tenseurs appelé Xk, nous devons obtenir les gradients
Tensorflow suit toujours le chemin des opérations. Je veux dire le comportement séquentiel des nœuds et la façon dont les données circulent entre eux. Cela se fait par le graphique
Si nous devons obtenir les dérivées du coût par rapport aux entrées X, ce que cela fera en premier est de charger le chemin de l'entrée x au coût en étendant le graphique.
Ensuite, cela commence dans l'ordre des rivières. Ensuite, distribuez les dégradés avec la règle de chaîne. (Identique à la rétropropagation)
De toute façon, si vous lisez les codes source appartiennent à tf.gradients (), vous pouvez constater que tensorflow a fait cette partie de distribution de gradient d'une manière agréable.
Alors que le backtracking tf interagit avec le graphique, dans le mot de passe, TF rencontrera différents nœuds. À l'intérieur de ces nœuds, il y a des opérations que nous appelons (ops) matmal, softmax, relu, batch_normalization, etc. graphique
Ce nouveau nœud compose la dérivée partielle des opérations. get_gradient ()
Parlons un peu de ces nœuds nouvellement ajoutés
À l'intérieur de ces nœuds, nous ajoutons 2 choses 1. Dérivée, nous avons calculé plus) 2.Aussi les entrées de l'opp correspondant dans la passe avant
Donc, selon la règle de la chaîne, nous pouvons calculer
C'est donc la même chose qu'une API de backword
Donc tensorflow pense toujours à l'ordre du graphe pour faire une différenciation automatique
Donc, comme nous savons que nous avons besoin de variables de passage direct pour calculer les gradients, nous devons également stocker les valeurs intermidiates également dans les tenseurs, ce qui peut réduire la mémoire Pour de nombreuses opérations, tf sait comment calculer les gradients et les distribuer.
la source