2016-10-26 4 views
0

spärliche tensor.shape-Methode gibt ein Tensor-Objekt zurück, das keinen Sinn macht, um die tatsächliche Form des spärlichen Tensors zu extrahieren, ohne auf die run-Funktion zurückzugreifen.Form eines spärlichen Tensors ohne Aufruf von run()

Um zu klären, was ich meine, zuerst eine spärliche Tensor betrachten:

a = tf.SparseTensor (Indizes = [[0, 0, 0], [1, 2, 1]], Werte = [1.0 + 2j, 2.0], die Form = [3, 4, 2])

a.shape Rückkehr:

tf.Tensor 'SparseTensor_1/Form: 0' shape = (3,) dtype int64 =

Das ist irgendwie nutzlos.

Betrachten Sie nun einen dichten Tensor:

a = tf.constant (np.random.normal (0,0, 1,0, (4, 4)) AsType (dtype = np.complex128).)

a.get_shape() gibt: TensorShape ([Dimension (4), Dimension (4)])

ich diesen Ausgang verwenden kann und es in eine Liste oder Tupel von ganzen Zahlen werfen, ohne jemals laufen() aufgerufen wird. Allerdings kann ich das gleiche für spärliche Tensor nicht tun, es sei denn, ich zuerst Sparse Tensor zu dichten konvertieren (die noch nicht für komplexe spärliche Tensor implementiert ist) und rufen Sie dann get_shape() -Methode auf, aber das ist irgendwie redundant, besiegt den Zweck die Verwendung eines spärlichen Tensors an erster Stelle und führt auch zu Fehlern auf der Straße, wenn der spärliche Eingangstensor komplex ist.

Gibt es eine Möglichkeit, die Form eines spärlichen Tensors zu erhalten, ohne run() aufzurufen oder zuerst in einen dichten Tensor umzuwandeln?

+0

Hallo QED, haben Sie ein Beispiel, wo Sie die Form Ihres spärlichen Tensors verwenden möchten? Ich nehme an, dass das für einen Tensorflow Op oder Variable definiert ist? – Corentin

Antwort

0

tf.SparseTensor ist als ein Triple von dichten Tensoren unter der Haube implementiert. Die shape eines SparseTensor ist nur ein Tensor; wenn Sie seinen Wert wissen wollen, ist Ihre beste Wette ist, um sie zu bewerten session.run mit:

print(sess.run(a.shape)) 

Im Allgemeinen hat Tensorflow nicht versprechen eine exakte Form auch für dichte Tensoren bei Graph Bauzeit zu berechnen; Formen sind beste Anstrengung und haben möglicherweise nicht einmal einen festen Wert. Selbst für einen dichten Tensor müssen Sie den Tensor mit run auswerten, um eine genaue Form zu erhalten.

Verwandte Themen