En tensorflow cuál es la diferencia entre tf.agregar y operador (+)?


En los tutoriales de tensorflow, veo ambos códigos como tf.add(tf.matmul(X, W), b) y tf.matmul(X, W) + b, ¿cuál es la diferencia entre usar la función math tf.add(), tf.assign(), etc y los operadores + y =, etc, en precisión u otros aspectos?

 31
Author: platinor, 2016-06-18

1 answers

No hay diferencia en la precisión entre a+b y tf.add(a, b). El primero se traduce a a.__add__(b) que se asigna a tf.add por medio de siguiente línea en math_ops.py

_OverrideBinaryOperatorHelper(gen_math_ops.add, "add")

La única diferencia es que el nombre del nodo en el gráfico subyacente es add en lugar de Add. Por lo general, puede comparar las cosas mirando la representación gráfica subyacente como esta

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())

También puede ver esto directamente inspeccionando el método __add__. Hay un extra nivel de indirección porque es un cierre, pero puede obtener la función subyacente de la siguiente manera

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__)

Y verás la salida a continuación, lo que significa que llaman a la misma función subyacente

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

Puede ver en tf.Tensor.OVERLOADABLE_OPERATORS que los siguientes métodos especiales de Python están potencialmente sobrecargados por las versiones apropiadas de TensorFlow

{'__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__'}

Estos métodos se describen en referencia de Python 3.3.7: emulando tipos numéricos. Tenga en cuenta que el modelo de datos Python no proporciona una way to overload assignment operator = para que la asignación siempre use implementación nativa de Python.

 40
Author: Yaroslav Bulatov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-18 21:35:09