examples - tensorflow neural network
En tensorflow, ¿cuál es la diferencia entre tf.add y operator(+)? (1)
No hay diferencia en la precisión entre a+b
y tf.add(a, b)
. El primero se traduce en a.__add__(b)
que se asigna a tf.add
mediante la siguiente línea en math_ops.py
_OverrideBinaryOperatorHelper(gen_math_ops.add, "add")
La única diferencia es que el nombre de nodo en el Gráfico subyacente es add
lugar de Add
. En general, puede comparar 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 nivel adicional 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 el resultado 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 desde 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__''}
Esos métodos se describen en Python reference 3.3.7 : emulación de tipos numéricos. Tenga en cuenta que el modelo de datos de Python no proporciona una forma de sobrecargar el operador de asignación =
por lo que la asignación siempre usa la implementación nativa de Python.
En los tutoriales de flujo tensor, veo los dos códigos como tf.add(tf.matmul(X, W), b)
y tf.matmul(X, W) + b
, ¿cuál es la diferencia entre utilizar la función matemática tf.add()
, tf.assign()
, etc. y los operadores +
y =
, etc., en precisión u otros aspectos?