2016-05-06 15 views
0

Hier ist die Definition von Tensor in tensorflow:Bad Scheibe Index Tensor in Tensorflow

word_weight = tf.get_variable("word_weight", [word_num]) 
x_index = tf.placeholder(tf.int32, [None, sentence_length, 1]) 

Wenn ich versuche: word_weight[0] oder word_weight[1] oder andere, es funktioniert, kann ich das Ergebnis. Aber wenn ich word_weight[x_index[0,0,0]] versuchen, erhalte ich Fehler:

TypeError: Bad slice index Tensor("modle/RNN/Squeeze_1:0", shape=(), dtype=int32) of type <class 'tensorflow.python.framework.ops.Tensor'> 

Antwort

2

TensorFlow Implementierung des Index-Operator (__getitem__) auf Tensoren ist ein Syntaxzucker für die tf.slice Funktion. Die Implementierung des tiefgestellten Operators unterstützt Python-Ganzzahlen, Listen, Tupel und slice als Typ für den Index. Wie Sie festgestellt haben, wird Tensor selbst nicht als ein Index unterstützt. Sie können jedoch die tf.slice Funktion direkt für Ihre Zwecke verwenden:

word_num = 100 
sentence_length = 10 
word_weight = tf.get_variable("word_weight", [word_num]) 
x_index = tf.placeholder(tf.int32, [None, sentence_length, 1]) 
ind = x_index[0, 0, 0:1] 
_ = tf.slice(word_weight, ind, [1]) 
+0

Warum Scheibe sollte [0, 0 0, 1] x_index, aber nicht x_index [0, 0, 0]? –

+0

'x_index [0, 0, 0]' gibt einen Skalar (Form '()') zurück, während 'x_index [0, 0, 0: 1]' einen Tensor (Form '(1,)') zurückgibt. 'tf.slice' benötigt Tensoren für seine Argumente. – keveman

Verwandte Themen