Перегрузка оператора TensorFlow
В чем разница между
tf.add(x, y)
а также
x + y
в Тензорфлоу? Что будет отличаться в вашем графике вычислений, когда вы строите свой граф с +
вместо tf.add()
?
В целом, являются +
или другие операции перегружены для тензоров?
2 ответа
Если хотя бы один из x
или же y
это tf.Tensor
объект, выражения tf.add(x, y)
а также x + y
эквивалентны. Основная причина, по которой вы можете использовать tf.add()
это указать явное name
Ключевой аргумент для созданной операции, что невозможно при перегруженной версии оператора.
Обратите внимание, что если ни x
ни y
это tf.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__
(двоичный//
в питоне 3)__truediv__
(двоичный/
в питоне 3)__mod__
(двоичный%
)__pow__
(двоичный**
)__and__
(двоичный&
)__or__
(двоичный|
)__xor__
(двоичный^
)__lt__
(двоичный<
)__le__
(двоичный<=
)__gt__
(двоичный>
)__ge__
(двоичный>=
)
Пожалуйста, обратите внимание, __eq__
(двоичный ==
) не перегружен. x == y
просто вернет Python логическое значение x
а также y
ссылаются на тот же тензор. Вам нужно использовать tf.equal()
явно проверить на поэлементное равенство. То же самое касается не равных, __ne__
(двоичный !=
).
Мистер прекрасно объяснил, что нет никакой разницы. Я просто добавлю при использовании tf.add
это выгодно.
tf.add имеет один важный параметр, который name
, Позволяет назвать операцию на графике, который будет виден на тензорной доске. Так что мое эмпирическое правило, если будет полезно назвать операцию в тензорной доске, я использую tf.
эквивалентно, иначе я иду для краткости и использую перегруженную версию.