TensorFlow 运算符重载

TensorFlow operator overloading

有什么区别
   tf.add(x, y)

   x + y

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

更一般地说,+ 或其他张量运算是否过载?

如果 xy 中的至少一个是所创建操作的 tf.Tensor object, the expressions tf.add(x, y) and x + y are equivalent. The main reason you might use tf.add() is to specify an explicit name 关键字参数,这对于重载运算符版本是不可能的。

请注意,如果 xy 都不是 tf.Tensor——例如,如果它们是 NumPy 数组——那么 x + y 将不会创建 TensorFlow 操作。 tf.add() 总是创建一个 TensorFlow op 并将其参数转换为 tf.Tensor 对象。因此,如果您正在编写一个可能同时接受张量和 NumPy 数组的库函数,您可能更愿意使用 tf.add().

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

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

请注意,__eq__(二进制 == 重载。 x == y 将简单地 return 一个 Python 布尔值是否 xy 指的是同一个张量。您需要明确使用 tf.equal() 来检查元素方面的相等性。同样适用于不等于,__ne__(二进制 !=)。

Mrry 很好地解释说没有真正的区别。我只会在使用 tf.add 有益时添加。

tf.add有一个重要的参数是name。它允许您在张量板中可见的图表中命名操作。所以我的经验法则是,如果在 tensorboard 中命名一个操作是有益的,我会使用 tf. 等价物,否则我会为了简洁而使用重载版本。