2017-06-25 3 views
0

Hier ist das Modell.Wie überprüft man Eingabe-Array-Formen in Keras?

model = Sequential() 
model.add(Reshape((3,150,150), input_shape=(150,150,3))) 
model.add(ZeroPadding2D((1,1))) 
print(model.output_shape) 
model.add(Conv2D(64,(3,3), activation='relu')) 
print model.output_shape 


(None, 5, 152, 150) 
(None, 3, 150, 64) 

Und wenn ich in Daten versuchen und Futtermittel, bekomme ich diese

ValueError: Error when checking target: expected conv2d_35 to have 4 dimensions, but got array with shape (32, 1) 

Ausgangsform nicht zu sein scheint mir zu geben, was die Schicht zu sehen ist. Die Schicht sieht (32,1), während die Ausgangsform die richtige 4-dimensional druckt (keine (etwa 32 mit der Losgröße), 3,150,64)

Was mache ich falsch? Warum ist diese Form (32,1)?

Antwort

0

Ihre Daten haben nicht 4 Dimensionen, Ihre Daten haben Form (32,1).

Ihr Modell erwartet Daten mit 4 Dimensionen: (Keine, 3, 150, 64).

Die Ausgabeform Ihres Modells muss die gleiche Form Ihrer Daten haben (Y).

Verwenden Sie model.summary, um alle Formen gleichzeitig anzuzeigen.

+0

Dies zeigt die Form des Layers, aber es zeigt nicht die Form der Daten selbst. Ich gebe Bilder weiter. Wie können sie sein (32,1)? Aus diesem Grund möchte ich das Daten-Array untersuchen, wenn es übergeben wird. 32 ist die Batch-Größe, aber warum ist es nur 1? Oh, vielleicht sind das die Ausgänge - y statt X .. – BigBoy1337

+0

Ja, es ist die Ausgabe, die von Keras "Ziel" genannt wird. Sie müssen Ihr Modell mit dieser Form enden lassen. Sie können dies zum Beispiel tun, indem Sie am Ende eine 'Flatten()' und eine "Dichte (1)" Ebene hinzufügen. (Achten Sie auf die Aktivierungsfunktionen, sie müssen auch mit Ihrem Ziel übereinstimmen). –

+0

ah ok. Gibt es eine Möglichkeit, die Form der Zieldaten bei der Einspeisung zu überprüfen? Damit ich bestätigen kann, dass es der output_shape des Modells entspricht? – BigBoy1337