TensorFlow 运算符重载
TensorFlow operator overloading
和
有什么区别
tf.add(x, y)
和
x + y
在 TensorFlow 中?当您使用 +
而不是 tf.add()
构建图形时,您的计算图形会有什么不同?
更一般地说,+
或其他张量运算是否过载?
如果 x
或 y
中的至少一个是所创建操作的 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
关键字参数,这对于重载运算符版本是不可能的。
请注意,如果 x
和 y
都不是 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 布尔值是否 x
和 y
指的是同一个张量。您需要明确使用 tf.equal()
来检查元素方面的相等性。同样适用于不等于,__ne__
(二进制 !=
)。
Mrry 很好地解释说没有真正的区别。我只会在使用 tf.add
有益时添加。
tf.add有一个重要的参数是name
。它允许您在张量板中可见的图表中命名操作。所以我的经验法则是,如果在 tensorboard 中命名一个操作是有益的,我会使用 tf.
等价物,否则我会为了简洁而使用重载版本。
和
有什么区别 tf.add(x, y)
和
x + y
在 TensorFlow 中?当您使用 +
而不是 tf.add()
构建图形时,您的计算图形会有什么不同?
更一般地说,+
或其他张量运算是否过载?
如果 x
或 y
中的至少一个是所创建操作的 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
关键字参数,这对于重载运算符版本是不可能的。
请注意,如果 x
和 y
都不是 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 布尔值是否 x
和 y
指的是同一个张量。您需要明确使用 tf.equal()
来检查元素方面的相等性。同样适用于不等于,__ne__
(二进制 !=
)。
Mrry 很好地解释说没有真正的区别。我只会在使用 tf.add
有益时添加。
tf.add有一个重要的参数是name
。它允许您在张量板中可见的图表中命名操作。所以我的经验法则是,如果在 tensorboard 中命名一个操作是有益的,我会使用 tf.
等价物,否则我会为了简洁而使用重载版本。