Подтвердить что ты не робот

Перегрузка оператора TensorFlow

В чем разница между

   tf.add(x, y)

и

   x + y

в TensorFlow? Что будет отличаться в вашем графике вычислений при построении графика с + вместо tf.add()?

В более общем плане, + или другие операции, перегруженные для тензоров?

4b9b3361

Ответ 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__ (двоичный !=).