Ответ 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
объекты, которые не могут использоваться в качестве тензоров (вместо этого вы должны называть методы для них, чтобы создавать операторы, которые работают с их состоянием), поэтому они не имеют тензорного имени.)