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?
Réponses
Trop de publicités?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.
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.