Fehler beim Überprüfen des Modellziels: erwartet, dass dichte_24 eine Form hat ... aber ein Array mit Form ... in Keras

8

Ich kann nicht verstehen, was diese Fehlermeldung mir zu sagen versucht.

Wenn ich mir die Zusammenfassung meines Modells anschaue, betrachte ich die letzten Schichten.

Aber wenn ich mein Modell anpasse, bekomme ich das:

Ich verstehe es nicht. Wenn ich das genau lese, scheint Keras zu sagen: "Ich habe mir die Etiketten (Ziele) für den Validierungssatz angeschaut, und vernünftigerweise hat mich das dazu gebracht, die letzte Schicht in Ihrem Modell zu formen (Keine, 2). anstatt tatsächlich eine letzte Schicht (None, 2) im Modell zu erhalten, bestand die Schicht aus einer tatsächlichen Anordnung, die eine andere Form hatte. "

Das ergibt keinen Sinn.

Ich denke, dass ich vermute, dass dieser Fehler im Allgemeinen sagen sollte:

"ValueError: Error when checking model target: although dense_n has shape (x, y), the shape of the target, (a,b), in incompatible." .

Will jemand zustimmen oder nicht zustimmen? Danke.

(Es gibt eine ähnliche Frage hier , aber nicht sehr hilfreich.)

    
Monica Heddneck 28.12.2016, 03:03
quelle

2 Antworten

3

Ich bin mir nicht sicher, ob die Antwort, die du erwartest, das ist, aber ...

Erstens: Ich stimme zu - die Fehlermeldung scheint seltsam, es sollte über Inkompatibilität zwischen dichte_24 und Ziel-Array sprechen.

Um nun Ihr Problem zu lösen, sollten Sie entweder Ihr Zielarray neu gestalten oder am Ende ein anderes Dense erstellen, das zu Ihrem Array passt.

Über Ihr Ziel-Array sollte es für eine Klassifizierung in zwei Klassen wie folgt aussehen:

  • (46000,2), wenn Ihre Klassifizierung zwei Werte verwendet, einen für die Wahrscheinlichkeit der Klasse A und einen anderen für die Wahrscheinlichkeit der Klasse B
  • (46000,1) Wenn Ihre Klassifizierung einen einzelnen Wert verwendet, der 0 Klasse A und 1 Klasse B ist (in diesem Fall sollte Ihre dichte Ebene (None, 1))
  • lauten

Was ich denke, ist die einfachste Lösung:

  • Anstatt Dense(2,...) am Ende Ihres Modells zu verwenden, verwenden Sie Dense(1, activation='sigmoid') .

Warum? Weil Ihre Zieldaten die Form (46000,1) haben, dh Sie haben nur eine Nummer für zwei Klassen. 0 ist eine Klasse, 1 ist eine andere.

    
Daniel Möller 08.05.2017 14:44
quelle
2

Keras sagt, dass das von Ihnen erstellte Netzwerk Arrays der Länge zwei ausgibt, aber Ihre Trainingsdaten Daten mit Shape (0,1) enthalten. Die Form der Trainingsdaten sollte jedoch der Form der Netzwerkausgabe entsprechen.

Die Form (None, 2) bedeutet einfach, dass das Netzwerk einen Stapel mit einer beliebigen Anzahl von Elementen akzeptiert, die selbst Arrays aus zwei Elementen sind (Das erste Element ist die Stapelgröße in Keras Shapes). Die richtige Eingabedatenform wäre also (2,).

Aus der Fehlermeldung, die wir sehen, haben Sie 4600 Trainingsdaten mit Shape (0, 1). Dies ist der Grund für den Konflikt. Ich vermute, dass beim Lesen der Trainingsdaten etwas schief läuft und Sie nicht wirklich zu Arrays aus zwei Elementen passen, wie Sie es sich vorgestellt haben.

    
milez 10.05.2017 11:26
quelle

Tags und Links