In che modo TensorFlow nomina i tensori?

Mi chiedo se questa è la comprensione corretta:

Tutti i tensori derivano da alcune operazioni e alle operazioni viene assegnato un nome nel costruttore o viene assegnato il nome predefinito per un particolare tipo di operazione. Se il nome non è univoco, TensorFlow lo gestisce automaticamente aggiungendo "_1" , "_2" , ecc. Un’operazione con n uscite tensore chiama questi tensori "op_name:0" , "op_name:1" , …, "op_name:n-1" .

Un problema sembra sorgere: se x è una tf.Variable , allora x.name fornisce "variable_name:0" x.name "variable_name:0" . Ciò è fonte di confusione: a cosa si riferisce "variable_name" ?

Le tue osservazioni sulla denominazione del Tensor sono assolutamente corrette: il nome di un Tensor è la concatenazione di

  1. il nome dell’operazione che lo ha prodotto,
  2. due punti (:), e
  3. l’indice di quel tensore nelle uscite dell’operazione che lo ha prodotto.

Pertanto il tensore chiamato "foo:2" è l’uscita dell’op denominato "foo" nella posizione 2 (con indici che iniziano da zero).

La denominazione di oggetti tf.Variable è leggermente strana. Ogni tf.Variable contiene un object tensore mutabile che contiene lo stato della variabile (e alcuni altri tensori). Un op "Variable" (che ha il nome "variable_name" nell’esempio) “produce” questo tensore mutabile ogni volta che viene eseguito come il suo 0 ° output, quindi il nome del tensore mutabile è "variable_name:0" .

Dal momento che un tf.Variable è per lo più indistinguibile da un tf.Tensor -in quello che può essere usato negli stessi posti-abbiamo preso la decisione di fare nomi di variabili simili ai nomi dei tensori, quindi la proprietà Variable.name restituisce il nome del tensore mutabile . (Ciò contrasta con tf.QueueBase oggetti tf.QueueBase e tf.ReaderBase , che non sono utilizzabili direttamente come tensori (invece devi chiamare metodi su di essi per creare operazioni che operano sul loro stato), quindi questi non hanno un nome simile a un tensore. )