52 votes

En tensorflow, quelle est la différence entre tf.add et operator (+)?

Dans les tutoriels de tensorflow, je vois les deux codes comme tf.add(tf.matmul(X, W), b) et tf.matmul(X, W) + b , quelle est la différence entre l'utilisation de la fonction mathématique tf.add() , tf.assign() , etc et les opérateurs + et = , etc., en précision ou sous d’autres aspects?

65voto

Yaroslav Bulatov Points 7316

Il n'y a pas de différence de précision entre a+b et tf.add(a, b). L'ancien se traduit par a.__add__(b) qui est tracé à l' tf.add par le biais de la ligne suivante dans math_ops.py

_OverrideBinaryOperatorHelper(gen_math_ops.add, "add")

La seule différence est que le nom de nœud dans le Graphe sous-jacent est - add au lieu de Add. Généralement, vous pouvez comparer des choses en regardant le Graphique sous-jacent à la représentation comme ceci

tf.reset_default_graph()
dtype = tf.int32
a = tf.placeholder(dtype)
b = tf.placeholder(dtype)
c = a+b
print(tf.get_default_graph().as_graph_def())

Vous pouvez aussi voir cela directement par l'inspection de l' __add__ méthode. Il y a un niveau supplémentaire d'indirection parce que c'est une fermeture, mais vous pouvez obtenir la fonction sous-jacente comme suit

real_function = tf.Tensor.__add__.im_func.func_closure[0].cell_contents
print(real_function.__module__ + "." + real_function.__name__)
print(tf.add.__module__ + "." + tf.add.__name__)

Et vous allez voir sortie ci-dessous ce qui signifie qu'ils appellent même fonction sous-jacente

tensorflow.python.ops.gen_math_ops.add
tensorflow.python.ops.gen_math_ops.add

Vous pouvez voir à partir de tf.Tensor.OVERLOADABLE_OPERATORS que Python suivant des méthodes spéciales sont potentiellement surchargé par les TensorFlow versions

{'__abs__',
 '__add__',
 '__and__',
 '__div__',
 '__floordiv__',
 '__ge__',
 '__getitem__',
 '__gt__',
 '__invert__',
 '__le__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__neg__',
 '__or__',
 '__pow__',
 '__radd__',
 '__rand__',
 '__rdiv__',
 '__rfloordiv__',
 '__rmod__',
 '__rmul__',
 '__ror__',
 '__rpow__',
 '__rsub__',
 '__rtruediv__',
 '__rxor__',
 '__sub__',
 '__truediv__',
 '__xor__'}

Ces méthodes sont décrites en Python référence 3.3.7: l'émulation de types numériques. Notez que Python, modèle de données ne fournit pas un moyen de la surcharge de l'opérateur d'assignation = si la cession utilise toujours le natif Python de mise en œuvre.

11voto

Salvador Dali Points 11667

Yaroslav bien expliqué que il n'y a pas de différence réelle. Je vais juste ajouter lors de l'utilisation d' tf.add est bénéfique.

tf.ajouter a un paramètre important qui est - name. Il vous permet de nommer l'opération dans un graphique qui sera visible dans tensorboard. Donc ma règle d'or, si elle sera bénéfique pour le nom d'une opération dans tensorboard, j'utilise tf. équivalent, sinon je aller pour des raisons de concision et d'utilisation version surchargée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X