在tensorflow中tf.add和运算符(+)有什么区别?
tensorflow
4
0

在tensorflow教程中,我看到了tf.add(tf.matmul(X, W), b)tf.matmul(X, W) + b这两个代码,使用数学函数tf.add()什么区别? , tf.assign()等以及运算符+=等,是在精度方面还是其他方面?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

a+btf.add(a, b)之间a+b精度没有区别。前者转换为a.__add__(b)tf.add通过tf.add以下行映射到tf.add

_OverrideBinaryOperatorHelper(gen_math_ops.add, "add")

唯一的区别是基础Graph中的节点名称是add而不是Add 。通常,您可以通过查看底层的Graph表示来比较事物

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

您还可以通过检查__add__方法直接看到此__add__ 。有一个间接的级别,因为它是一个闭包,但是您可以按以下方式获取底层函数

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_OPERATORS看到以下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参考3.3.7 :模拟数字类型中进行了描述。请注意,Python数据模型没有提供重载赋值运算符=的方法,因此赋值始终使用本机Python实现。

收藏
评论

雅罗斯拉夫很好地解释说,没有真正的区别。我只会在使用tf.add有益时添加。

tf.add有一个重要的参数,即name 。它使您可以在张量图中可见的图形中命名操作。因此,我的经验法则是,如果在tensorboard中命名操作会有所帮助,我会使用tf.等价的,否则我为简洁起见并使用重载版本。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号