2017-10-17 1 views
0

J'ai recherché sur google et appris que la fonction constant() de Tensorflow génère un Tenseur constant (grande surprise!) Et ne peut pas être modifié.Modification de la constante Tensorflow Tensor

Mais quand je fais:

>>> a = tf.constant(0.0) 
>>> a = a + 1.0 

Je ne vois pas d'erreur généré par tensorflow. Je comprends la raison, a est maintenant une nouvelle opération tensorielle Add (<tf.Tensor 'add_1:0' shape=() dtype=float32>).

Ma question est: Quelle est l'utilité de Tensorflow constant si nous pouvons le modifier? Cela a-t-il quelque chose à voir avec l'optimisation des graphes? Est-ce que je manque quelque chose de trivial ici?

Merci d'avance.

+0

Jetez un oeil à cette réponse: https://stackoverflow.com/a/2174170/4800086 – Swier

Répondre

2

oui, il vous manque quelque chose de trivial.

a = tf.constant(0.0) 

a est une variable de python qui contient un noeud constant du graphe de calcul. Dans le graphique, il a un nom, appelons-le constant:0.

a = a + 1.0 

a est une nouvelle variable de python (l'affectation est une opération destructrice) qui maintient l'opération d'ajout entre le noeud constant:0 qui est encore défini dans le graphique et un nouveau noeud constant, créer automatiquement lors de l'utilisation 1.0 (constant_1:0).

Ainsi, dans cette ligne, vous surchargeons une variable python afin de rendre la tenue d'un noeud add: vous n'êtes pas toucher les valeurs du noeud graphique constant:0.

La constante, en fait, est définie dans le graphique que tensorflow décrit et elle ne peut pas être modifiée. Ce que vous pouvez modifier, à la place, est la variable python qui pointe vers un certain nœud dans le graphique.

Vous pouvez considérer les variables python comme des pointeurs vers les nœuds du graphique.

+0

Ah, maintenant je comprends. J'ai mentionné "Je comprends la raison, une est maintenant une nouvelle opération tensorielle Ajouter" dans la question, mais je n'ai pas vu que le graphique de flux de données Tensorflow et Python sont deux choses différentes. Merci –

+0

Y at-il un moyen de générer intentionnellement cette erreur? –

+0

Faites-vous référence à quelle erreur? – nessuno