在tensorflow教程,我看到像两个代码tf.add(tf.matmul(X, W), b)和tf.matmul(X, W) + b,就是用数学函数的区别tf.add(),tf.assign()等和运营商+和=等,在精度或其他方面?
Yar*_*tov 50
a+b和之间的精度没有区别tf.add(a, b).前者通过math_ops.py中的跟随行转换为a.__add__(b)映射到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())
Run Code Online (Sandbox Code Playgroud)
您也可以通过检查__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__)
Run Code Online (Sandbox Code Playgroud)
你会看到下面的输出意味着他们调用相同的底层函数
tensorflow.python.ops.gen_math_ops.add
tensorflow.python.ops.gen_math_ops.add
Run Code Online (Sandbox Code Playgroud)
您可以从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__'}
Run Code Online (Sandbox Code Playgroud)
Python参考3.3.7中描述了这些方法:模拟数字类型.请注意,Python数据模型不提供重载赋值运算符的方法,=因此赋值始终使用本机Python实现.
| 归档时间: |
|
| 查看次数: |
19370 次 |
| 最近记录: |