Comment les œuvres dans tensorflow
Dans tensorflow il semble que toute les algorithme est réalisée par un seul exécutant d'un optimiseur sur une certaine fonction de coût, qui est la sortie de certains MLP ou de CNN.
Je ne suis pas entièrement comprendre comment tensorflow sait par le coût qu'il s'agit bien d'une sortie d'un certain NN? Une fonction de coût peut être définie pour n'importe quel modèle. Comment dois-je "raconter" qu'une certaine fonction de coût provient d'une NN?
- Vous devriez lire à propos de comment DL bibliothèques de travaux et plus précisément graphe de calcul. tldr: la fonction de coût est un noeud d'un graphe et les bords (poids) sont en provenance du réseau de la dernière couche.
Vous devez vous connecter pour publier un commentaire.
Question
Comment dois-je "dis" tf qu'une certaine fonction de coût provient d'une NN?
(court) Réponse
Cela se fait simplement en configurant votre optimizer afin de minimiser (ou maximiser) un tenseur. Par exemple, si j'ai une perte de fonction de la façon
où y0 est la la vérité terrain (ou de sortie désirée) et y_out est le résultat calculé, puis j'ai pu minimiser la perte, par la définition de ma formation en fonction de la façon
Cela dit Tensorflow que lorsque train est calculé, c'est d'appliquer la descente de gradient sur la perte de la minimiser, et la perte est calculée à l'aide de y0 et y_out, et ainsi de descente de gradient va aussi affecter les personnes (si elles sont éducables variables), et ainsi de suite.
La variable y0, y_out, perte, et train ne sont pas standard de python variables, mais plutôt la description d'un graphe. Tensorflow utilise les informations à propos du graphe de la dérouler lors de l'application de la descente de gradient.
Spécifiquement sur la façon dont il le fait est au-delà de la portée de cette réponse. Ici et ici sont deux bons points de départ pour plus d'informations sur plus de détails.
Exemple De Code
Examinons un exemple de code. D'abord le code.
Nous allons aller à travers elle, mais dans l'ordre inverse, en commençant par
Cela dit tensorflow de regarder le graphique noeud défini par train et de le calculer. Train est défini comme
Pour calculer cette tensorflow doit calculer la la différentiation automatique pour perte, ce qui signifie marcher le graphique. perte est défini comme
Qui est vraiment tensorflow l'application de la différentiation automatique dérouler de première tf.reduce_sum, puis tf.carré, puis y0 - y_out, ce qui conduit à avoir à marcher sur le graphique pour les deux y0 et y_out.
y0 est une constante, et ne sera pas mis à jour.
y_out sera traitée semblable à la perte, d'abord tf.sigmoïde seront traitées, etc...
Dans l'ensemble, chaque opération ( telle que la tf.sigmoïde, tf.carré ) ne définit pas seulement l'opération ( appliquer sigmoïde ou carrée), mais aussi les informations nécessaires pour la différentiation automatique. Ceci est différent du standard de python mathématiques comme
L'équation ci-dessus code pour rien, sauf la façon de mettre à jour x, où que
code pour le graphique de la soustraction y_out de y0 et stocke l'opération et assez à faire la différentiation automatique dans z
La les a été créé par Rumelhart et Hinton et al. et publiée sur la Nature en 1986.
Comme indiqué dans la section 6.5: Back-Propagation et d'Autres DifferentiationAlgorithms de la deeplearning livre il y a deux types d'approches pour la rétro-propagation des gradients à travers de calcul graphiques: symbole-à-numéro de la différenciation et de symbole de symbole de produits dérivés. La plus pertinente Tensorflow comme indiqué dans ce document: Un Tour de TensorFlow est la plus tard ce qui peut être illustré à l'aide de ce diagramme:
Source: la Section II de la Partie D du Un Tour de TensorFlow
Dans la partie gauche de la Fig. 7 ci-dessus, w est le poids(ou Variables) dans Tensorflow et x et y sont deux intermédiaire en opérations(ou nœuds, w, x, y et z sont toutes les opérations) pour obtenir le scalaire perte z.
Tensorflow va ajouter un nœud à chaque nœud(si nous avons l'impression que les noms de variables en un certain point de contrôle, nous pouvons voir quelques variables supplémentaires pour de tels nœuds et ils seront éliminés si nous geler le modèle à un protocole de fichier de mémoire tampon pour le déploiement) dans le graphique pour le dégradé qui peut être vu dans le diagramme (b) sur le côté droit: dz/dy, dy/dx, dx/dw.
Au cours de la traversée de l'arrière de la propagation à chaque nœud, on multiplie son gradient avec celle de la précédente et, enfin, pour obtenir une symbolique de la poignée à l'ensemble de la cible dérivés dz/dw = dz/dy * dy/dx * dx/dw, qui s'applique exactement de la chaîne de la règle. Une fois le dégradé est travaillé w peut se mettre à jour avec un taux d'apprentissage.
Pour de plus amples informations, veuillez lire ce document: TensorFlow:
Apprentissage automatique à grande Échelle sur les Systèmes Distribués Hétérogènes