2015-11-14 12 views
7

So nehme ich einen TensorTensorFlow Initialisierung Tensor von Einsen

X = tf.placeholder("float", [None, 5]) 

Damit ich die Anzahl der Spalten wissen aber nicht die Anzahl der Zeilen. Ich brauche einen Vektor von Einsen der Dimension nrows x 1

nun folgende Codeblock arbeiten,

o = tf.ones(shape=(tf.shape(X)[0], 1)) 
==> TypeError: List of Tensors when single Tensor expected 

auch nicht,

o = tf.ones(shape=(X.get_shape()[0].value, 1)) 
==> TypeError: Input 'dims' of 'Fill' Op has type 
    string that does not match expected type of int32. 

nun nicht initialisiert werden, habe ich, dass ein Weg gefunden Um das zu umgehen, mache ich meinen Vektor von denen zu einem Platzhalter,

o = tf.placeholder(dtype=tf.float32, shape=[None, 1]) 

Und in einer feed_dict Reihe von Einsen von geeigneter Größe zu übergeben. Aber diese Lösung erscheint mir unelegant und nicht die beabsichtigte Verwendung eines Platzhalters. Ich könnte hier falsch liegen, aber es gibt einen besseren Weg.

Antwort

6

Die Art und Weise, Ihr Problem zu lösen, ist tf.pack Betrieb zu verwenden:

o = tf.ones(shape=tf.pack([tf.shape(X)[0], 1]))

Der Grund, warum Sie mit Fehlern ist, dass TensorFlow Form erwartet wird link eine Liste von ganzen Zahlen oder einem Tensor zu sein. tf.pack macht es einfach, eine Liste von Integer- und/oder TensorFlow-Skalaren in ein Tensor-Objekt zu konvertieren.

+0

Vielen Dank! Ihre Lösung hat funktioniert – user1936768

+0

tf.pack wird nicht mehr von 'tensorflow> = 1.00' unterstützt –

+0

Sie können' stack' verwenden, obwohl ich denke? –

Verwandte Themen