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?
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.
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