2016-07-18 31 views
0

In dieser Demo: http://cs.stanford.edu/people/karpathy/convnetjs/demo/mnist.html die letzte Maxpool-Schicht ist 4x4x16 und die vollständig verbundene Schicht 1x1x10.Wie komme ich von der letzten Maxpool-Ebene zur fc-Ebene?

Ich verstehe nicht, wie Sie zu 10 bekommen. In meinem Verständnis, z. Ich mache conv2 (Option: 'gültig') mit nur einem 4x4 Filter, Schritt = 1 und keine Null-Padding. Die Ausgabe wird dann 1x1x16 sein. Wenn ich mehr Filter mache, ist die Ausgabe ein Vielfaches von 16 (z.B. 32).

Update, meine Idee ist jetzt: Sobald ich den 1x1x16 Vektor habe, werde ich 10 eindimensionale Faltungen machen. Also filtere mit conv1 (Option: 'valid') und verwende 10 Filter (Vektor mit Länge 16). Die Ausgabe wird dann ein 1x1x10-Vektor sein. Bitte lassen Sie mich wissen, was ich richtig oder falsch mache.

Antwort

0

Sie missverstehen das Konzept von "voll verbunden". Siehe this top diagram für ein vollständig verbundenes Netzwerk. Du machst keine weitere Faltung. Stattdessen linearisieren Sie die vorherige Ebene: eine direkte, zeilenweise Kopie aller 16 Filter, verkettet in einen Vektor, 256x1.

„Fully verbunden“ bedeutet, dass jedes Neuron eines Lays zu jedes Neuron des anderen verbunden ist. Sie haben 256 Neuronen in diesem Vektor, verbunden (Gewicht) mit jedem der 10 Neuronen in der letzten Schicht. Das sind insgesamt 2560 Gewichte.

+0

danke, du hast Recht. Ich habe die Funktion convn() in Matlab gefunden, die auch eine gute Alternative zu sein scheint –