Перегрузка оператора 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. эквивалентно, иначе я иду для краткости и использую перегруженную версию.

Другие вопросы по тегам