2017-11-09 3 views
0

Ich benutze Keras, um ein CNN zu machen, und ich möchte das Modell mit plot_model() visualisieren.Keras Schichtform in plot_model()

Wenn ich auf die Form der Conv2d Schichten schaue, gibt es eine Sache, die ich nicht herausfinden kann.

Lassen Sie uns sagen, dass meine Conv2d Schicht Kerngröße [8 x 8] hat, schreiten [4 by 4] ist, Polsterung ist 'same' und ich möchte 16 Feature-Karten.

Eingabeform für diese Ebene ist [None, 3, 160, 320] und Ausgabe ist [None,1,40,16].

"Keine" ist Proben, aber was ist 1 und 40? Ich denke, 16 ist die Anzahl der Feature-Maps?

Da ich padding = 'same' implementiert habe, sollte die Bildgröße nicht die gleiche Breite und Höhe wie Eingabe haben, oder ist das nicht die gleiche Sache?

Danke!

Antwort

0

Nun, da Sie "Schritte" verwenden, haben Sie nie die gleiche Form.

Ihr Faltungsfilter (der als verschiebbares Fenster angesehen werden kann) springt beim Verschieben um vier Pixel.

Als Ergebnis erhalten Sie Ihre endgültige Form geteilt durch 4 (und aufgerundet).

  • 3/4 aufzurunden = 1
  • 160/4 = 40
  • 16 die Anzahl von Spielkarten ist in der Tat.
+0

Rohbild Eingangsdaten [None, 3, 160, 320], das ist [Proben, die Farbtiefe, Höhe, Breite]. Wende ich Faltung auf die falschen Dimensionen an? Zeigt dies an, dass sich der Kernel in der Tiefe x Höhe bewegt? Sollte sich der Kernel nicht in der Höhe x Breite bewegen? – NorwegianClassic

+0

Ja, dies zeigt an, dass Ihre Abmessungen invertiert sind. Keras Standard 'data_format' ist' 'channels_last'':' (Beispiele, Höhe, Breite, Kanäle) '. Beachten Sie die "16 Features" an der letzten Position. –

+0

Sie können dies ändern, wenn Sie, indem Sie den 'data_format = 'channels_first'' in den Schichten werden sollen, oder die globale Einstellung zu ändern in der' \ .keras \ keras.json' Datei. --- ' 'channels_last'' hat einige Vorteile in Bezug auf bestimmte Klassifikationsprobleme, Verluste und Aktivierungen, die die letzte Dimension verwenden. –