2017-04-26 1 views
1

Ich versuche, das TensorFlow MNIST-Beispiel zu ändern, so dass die Platzhaltereingabewerte an eine Variable für die Manipulation übergeben werden, bevor die Ergebnisse generiert werden.Tensorflow - Platzhalterwerte in Variablen zuweisen

Zum Beispiel:

import tensorflow as tf 

# create placeholder/weights/biases 
input_x = tf.placeholder(tf.float32, [None, 784]) 
input_W = tf.Variable(tf.zeros([784, 10])) 
input_b = tf.Variable(tf.zeros([10])) 

# Create the new variable 
var_x = tf.Variable(tf.zeros([784]), trainable=False) 

# Perform an arbitrary manipulation on MNIST input, and assign to var_x 
for i in range(0,784): 
    var_x[i].assign(input_x[i]/2) 

input_Y = tf.matmul(var_x, input_W) + input_b 

Im Beispiel oben, ich bin vorbei Platzhalter Werte INPUT X in var_x, wo ich beliebige Manipulationen an den Werten durchführen kann, bevor du durch Gewichte multipliziert das Ausgabeergebnis zu erhalten.

Ich erhalte die folgende Fehlermeldung auf tf.matmul:

ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shapes: [784], [784,10]. 

Ich bin verwirrt, warum in dem obigen Beispiel, das funktioniert:

tf.matmul(input_x, input_W) + input_b 

aber nicht:

tf.matmul(var_x, input_W) _ input_b 

Da sowohl input_x als auch var_x beide ein 784 Längenvektor sein sollten.

Ich möchte im Wesentlichen genau die gleiche Matrixmultiplikation haben, die Sie im normalen MNIST-Beispiel haben würden, aber eine Variable anstelle eines Platzhalters verwenden.

Das scheint, als sollte es super unkompliziert sein, aber ich bin neu in TensorFlow, und obwohl ich viele Tutorials/SO-Fragen gelesen habe, habe ich dieses spezielle Szenario noch nirgendwo zuvor gesehen.

Vielen Dank im Voraus für Anregungen!

Antwort

0

Da sowohl input_x als auch var_x beide ein 784 Längenvektor sein sollten.

Das stimmt nicht genau. Input_x hat die Form [None, 784] und var_x hat die Form [784].

Leider habe ich nicht genau sehen, was Sie zu tun versuchen ...

ich es im Wesentlichen genau das gleiche Matrixmultiplikation sein wollen Sie in der normalen MNIST Beispiel haben würde, aber unter Verwendung von eine Variable und kein Platzhalter.

Wenn Sie eine Variable anstatt Platzhalter verwenden möchten könnte man sagen,

input_x = tf.Variable(tf.float32, preloaded_digits_numpy_array) 

Und den Rest des Codes lassen, wie es ist ...

+0

Vielen Dank für die Antwort, sorry, wenn es war nicht klar. Ich möchte die Ziffern wie gewohnt in den Platzhalter laden, aber vor der Berechnung der Ergebnisse einige Manipulationen an den Werten vornehmen. – inkbleed

+0

Sorry, mein Kommentar wird abgeschnitten. Ich wollte hinzufügen: Also im obigen Beispiel, nehme ich die Platzhalter Werte gefüttert und halbiert. Ähnlich möchte ich vielleicht die Platzhalterwerte nehmen und sie kombinieren oder sie mitteln. Ich möchte das eventuell mit mehreren Variablen tun, also muss input_x von der aktualisierten/matmul'd-Variablen getrennt sein. Hoffe, das ist klarer!Prost – inkbleed

+0

Mmm, in diesem Fall, warum nicht diese Operation mit numpy vor dem Einführen in den Graphen durchführen? – rmeertens