2017-05-12 6 views
0

Also hier ist mein Code für ein vollständiges Verständnis: https://hastebin.com/qigimomika.py .Warum erhalte ich diesen ValueError?

Also im Grunde habe ich ein Problem mit den folgenden Zeilen:

ein bisschen Kontext:

def weight_variable(shape): 
    initial = tensorflow.truncated_normal(shape, stddev=0.01) 
    return tensorflow.Variable(initial) 

def bias_variable(shape): 
    initial = tensorflow.constant(0.01, shape=shape) 
    return tensorflow.Variable(initial) 

w_layer1 = weight_variable([4, 32]) 
b_layer1 = bias_variable([32]) 

input_layer = tensorflow.placeholder("float", [4]) 

die Linie, die den Fehler erzeugt:

h_layer1 = tensorflow.add(tensorflow.matmul(input_layer, w_layer1),b_layer1) 

Wenn ich den ganzen Code ausführen (was oben ist) erzeugt es den folgenden Wertfehler

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

Jetzt meine Frage: Was passiert und wie kann ich das vermeiden?

Vielen Dank für Ihre Aufmerksamkeit

EDIT: Dank Prune und Ali Abbasi.

Meine Lösung: änderte ich die input_layer zu:

input_layer = tensorflow.placeholder("float", [1, 4]) 

Das Problem war, dass meine erste Array tensorflow Rang 1 ([4]) und mein zweiten Array Rang 2 ([4, 32]) war. So habe ich diese Zeile:

state = [state] 

wobei Zustand der Eingang:

output_layer.eval(feed_dict={input_layer : state}) 

Zustand war anfangs [1, 2, 3, 4] (Rang 1), jetzt ist es [[1, 2, 3, 4]] (Rang 2).

dank

EDIT2: Ok ich viel seit dem letzten EDIT geändert. Ich habe die Änderungen verloren, um sie aufzunehmen. Wenn Sie meinen Code here sehen möchten, ist es. Ich weiß, es ist unordentlich wie Scheiße. Für jetzt bin ich einfach so glücklich, dass Scheiße funktioniert: "D. Du wirst meinen Code nicht verstehen können, es ist ein totaler Durcheinander, aber ich wollte nur den aktuellen Zustand dokumentieren. Ein großer danke zu Ali Abbasi. D

+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren MCVE-Code veröffentlicht und das Problem genau beschrieben haben. Wir sollten in der Lage sein, Ihren gesendeten Code in eine Textdatei einzufügen und das beschriebene Problem zu reproduzieren. – Prune

+0

danke für Ihre Antwort. Ich habe es ein wenig geändert, also hoffe ich, dass es auf diese Weise in Ordnung ist. –

+0

Nah genug. Wir sollten in der Lage sein, Ihren gebuchten Code in eine Textdatei einzufügen und das von Ihnen beschriebene Problem zu reproduzieren. Für NNs sollte dies ausreichen. – Prune

Antwort

1

Hier sind wir, da Sie MatMul Operationen kennen klassische Matrixmultiplikation Betrieb ist also, wenn wir zwei Matrizen multiplizieren möchten, M1 und M2, mit Form AxB und BxC bzw. sollten wir gleichen Formen B haben, wenn wir will zur Multiplikation und im Ergebnis:

M1 x M2 Ergebnisse in einer Matrix R mit Form AxC.

Also in Ihrem Fall versuchen Sie zwei Matrizen mit Form einer Multiplikation 4x1 und 4x32, so wirft es einen Fehler von Form Problem, sollten Sie den ersten Tensor umsetzen, dann haben Sie:

1x4 MatMul 4x32 Ergebnis in 1x32 Matrix.

Ihr Code hier:

h_layer1 = tensorflow.add(tensorflow.matmul(input_layer, w_layer1),b_layer1)

Verwendung wie folgt aus:

h_layer1 = tensorflow.add(tensorflow.matmul(tf.transpose(input_layer), w_layer1),b_layer1)

Für ausführlichere Antwort, können Sie die Formen von Tensoren in jeder Stufe drucken wie:

print h_layer1.get_shape()

Und sehen Sie die Formen, dann können Sie Ihre Formen und Eingaben ändern.

Viel Glück.

+0

Ok danke nochmal: D. Es war nicht genau die Lösung, aber sie hat mich dazu geführt. Ich werde meinen Beitrag bearbeiten und die Lösung dort finden. –

+0

Froh, nützliche Antwort zu sein :) –

Verwandte Themen