在tensorflow中,tf.add和运算符(+;)之间有什么区别?

在tensorflow中,tf.add和运算符(+;)之间有什么区别?,tensorflow,Tensorflow,在tensorflow教程中,我看到了两种代码,如tf.add(tf.matmul(X,W),b)和tf.matmul(X,W)+b,使用数学函数tf.add(),tf.assign()等与运算符+/code>和=/code>等在精度或其他方面有什么区别 在a+b和tf之间精度没有差异。添加(a,b)。前者转换为a.\uuu add\uu(b),通过in-math\u ops.py映射到tf.add \u覆盖NaryOperatorHelper(gen\u math\u ops.add,“add

在tensorflow教程中,我看到了两种代码,如
tf.add(tf.matmul(X,W),b)
tf.matmul(X,W)+b
,使用数学函数
tf.add()
tf.assign()
等与运算符
+/code>和
=/code>等在精度或其他方面有什么区别

a+b
tf之间精度没有差异。添加(a,b)
。前者转换为
a.\uuu add\uu(b)
,通过in-math\u ops.py映射到
tf.add

\u覆盖NaryOperatorHelper(gen\u math\u ops.add,“add”)

唯一的区别是基础图中的节点名是
add
,而不是
add
。您通常可以通过如下方式查看底层的图形表示来进行比较

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())
您还可以通过检查
\uuuuu添加\uuuu
方法直接看到这一点。因为它是一个闭包,所以有一个额外的间接层,但是您可以得到如下的底层函数

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__)
您将看到下面的输出,这意味着它们调用相同的底层函数

tensorflow.python.ops.gen_math_ops.add
tensorflow.python.ops.gen_math_ops.add
您可以从
tf.Tensor.OVERLOADABLE_运算符
中看到,以下Python特殊方法可能会被相应的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__'}

这些方法如中所述:模拟数值类型。请注意,Python数据模型不提供重载赋值运算符的方法,因此赋值始终使用本机Python实现。

Yaroslav很好地解释了这两者之间没有真正的区别。当使用
tf时,我将只添加。添加
是有益的

有一个重要参数,即
名称
。它允许您在tensorboard中可见的图形中命名操作。所以我的经验法则是,如果在tensorboard中命名一个操作是有益的,我会使用
tf.
equired,否则我会力求简洁并使用重载版本

a = [1,1,1,1]
b = [1,1,1,1]
w = tf.add(a, b)


with tf.Session() as sess:
    p = sess.run(w)
    print(p)

a+b

现在,
p
打印的值将是
[2,2,2,2]
,而简单的
a+b
打印的值将是
[1,1,1,1,1,1,1,1,1]
,那么为什么要定义这些tensorflow方法呢?@Hossein,因为我们谷歌喜欢额外的。可能的重复