Как тензоры имен TensorFlow?

Интересно, правильно ли это понимает:

Все тензоры выведены из некоторой операции, а операциям задано имя в конструкторе или задано имя по умолчанию для определенного типа операции. Если имя не уникально, TensorFlow автоматически обрабатывает это путем добавления "_1", "_2" и т.д. Операция с n тензорными выходами называет эти тензоры "op_name:0", "op_name:1",..., "op_name:n-1".

Возникает одна проблема: если x есть tf.Variable, то x.name дает "variable_name:0". Это запутывает: к чему относится "variable_name"?

Ответы

Ответ 1

Ваши наблюдения над наименованием Tensor абсолютно правильны: имя Tensor является конкатенацией

  • имя выполняемой операции,
  • двоеточие (:) и
  • индекс этого тензора на выходах операции, которая его произвела.

Следовательно, тензор с именем "foo:2" является выходом op с именем "foo" в позиции 2 (с индексами, начинающимися с нуля).

название tf.Variable объекты немного странный. Каждый tf.Variable содержит изменчивый тензорный объект, который содержит состояние переменной (и несколько других тензоров). A "Variable" op (который имеет имя "variable_name" в вашем примере) "производит" этот изменяемый тензор каждый раз, когда он запускается как его 0-й выход, поэтому имя изменяемого тензора "variable_name:0".

Так как a tf.Variable в основном неотличим от tf.Tensor — в нем он может использоваться в тех же местах — мы приняли решение сделать имена переменных похожими на имена тензоров, поэтому свойство Variable.name возвращает имя изменяемого тензора. (Это контрастирует с tf.QueueBase и tf.ReaderBase объекты, которые не могут использоваться в качестве тензоров (вместо этого вы должны называть методы для них, чтобы создавать операторы, которые работают с их состоянием), поэтому они не имеют тензорного имени.)