TensorFlow运算符重载

Tra*_*tal 31 python machine-learning tensorflow

有什么区别

   tf.add(x, y)
Run Code Online (Sandbox Code Playgroud)

   x + y
Run Code Online (Sandbox Code Playgroud)

在TensorFlow中?当您使用+而不是tf.add()?构建图形时,计算图形会有什么不同?

更一般地说,是否 +为张量超载或其他操作?

mrr*_*rry 62

如果至少一个xy是一个tf.Tensor对象,则表达式tf.add(x, y)x + y是相等的.您可能使用的主要原因tf.add()name为创建的op 指定显式关键字参数,这对于重载的运算符版本是不可能的.

需要注意的是,如果没有x,也不ytf.Tensor如果他们是NumPy的-例如阵列,那么x + y将不会创建TensorFlow运算.tf.add()总是创建一个TensorFlow操作并将其参数转换为tf.Tensor对象.因此,如果您正在编写可能同时接受张量和NumPy数组的库函数,您可能更愿意使用tf.add().

以下运算符在TensorFlow Python API中重载:

  • __neg__(一元-)
  • __abs__(abs())
  • __invert__(一元~)
  • __add__(二进制+)
  • __sub__(二进制-)
  • __mul__(二元元素*)
  • __div__(/Python 2中的二进制文件)
  • __floordiv__(//Python 3中的二进制文件)
  • __truediv__(/Python 3中的二进制文件)
  • __mod__(二进制%)
  • __pow__(二进制**)
  • __and__(二进制&)
  • __or__(二进制|)
  • __xor__(二进制^)
  • __lt__(二进制<)
  • __le__(二进制<=)
  • __gt__(二进制>)
  • __ge__(二进制>=)

请注意,__eq__(二进制==)不会超载.x == y将简单地返回一个Python布尔值,x并且y引用相同的张量.您需要tf.equal()显式使用以检查元素明确的相等性.同样不等于__ne__(二进制!=).

  • 需要补充的一件事是,您还可以像 numpy 中一样使用“@”重载“tf.matmul()”。 (2认同)