Ответ 1
Если хотя бы один из x
или y
является объектом tf.Tensor
, выражения tf.add(x, y)
и x + y
эквивалентны. Основная причина, вы можете использовать tf.add()
, чтобы явно указать name
аргумента ключевого слова для созданного цита, что невозможно с перегруженной версией оператора.
Заметим, что если ни x
ни y
не являются tf.Tensor
- например, если они являются массивами NumPy, то x + y
не будет создавать tf.Tensor
. tf.add()
всегда создает оператор TensorFlow и преобразует его аргументы в объекты tf.Tensor
. Поэтому, если вы пишете библиотечную функцию, которая может принимать как тензоры, так и массивы NumPy, вы можете использовать tf.add()
.
Следующие операторы перегружены в API Penson TensorFlow:
-
__neg__
(унарный-
) -
__abs__
(abs()
) -
__invert__
(унарный~
) -
__add__
(двоичный+
) -
__sub__
(двоичный-
) -
__mul__
(двоичный__mul__
*
) -
__div__
(двоичный/
в Python 2) -
__floordiv__
(двоичный//
в Python 3) -
__truediv__
(двоичный/
в Python 3) -
__mod__
(двоичный%
) -
__pow__
(двоичный**
) -
__and__
(двоичный&
) -
__or__
(двоичный|
) -
__xor__
(двоичный^
) -
__lt__
(двоичный<
) -
__le__
(двоичный<=
) -
__gt__
(двоичный>
) -
__ge__
(binary>=
)
Обратите внимание: __eq__
(binary ==
) не перегружен. x == y
будет просто возвращать логическое значение Python, если x
и y
относятся к одному и тому же тензору. Вы должны явно использовать tf.equal()
для проверки равенства по элементам. То же самое касается не равных, __ne__
(двоичный !=
).