Python keras, wie man eine dichte Schicht in eine Faltungsschicht transformiert

8

Ich habe ein Problem, die richtige Zuordnung der Gewichte zu finden, um eine dichte Schicht in eine Faltungsschicht zu verwandeln.

Dies ist ein Auszug eines ConvNet, an dem ich gerade arbeite:

%Vor%

Nach dem MaxPooling hat die Eingabe die Form (512,7,7). Ich möchte die dichte Schicht in eine Faltungsschicht umwandeln, damit sie so aussieht:

%Vor%

Allerdings weiß ich nicht, wie ich die Gewichte umformen muss, um die abgeflachten Gewichte korrekt der (4096,512,7,7) Struktur zuzuordnen, die für die Faltungsschicht benötigt wird. Im Moment haben die Gewichte der dichten Schicht eine Dimension (250884096). Ich muss diese 25088 Elemente irgendwie auf eine Dimension von (512,7,7) abbilden, während ich die korrekte Zuordnung der Gewichte zu den Neuronen beibehalte. Bis jetzt habe ich verschiedene Möglichkeiten der Umformung und der anschließenden Umsetzung ausprobiert, aber ich war nicht in der Lage, die richtige Zuordnung zu finden.

Ein Beispiel für das, was ich versucht habe, wäre dies:

%Vor%

aber es ordnet die Gewichte nicht korrekt zu. Ich habe überprüft, ob das Mapping korrekt ist, indem ich die Ausgabe für beide Modelle vergleiche. Wenn es richtig gemacht wird, erwarte ich, dass die Ausgabe gleich sein sollte.

    
pkropf 01.05.2016, 11:58
quelle

1 Antwort

6

Suchen Sie noch nach einer Lösung? Hier ist es:

%Vor%

in Ihrem Fall:

%Vor%

Der schwierigste Teil ist das Umdrehen von Conv-Filtern [:,:, :: - 1, :: - 1]. Theano tut Faltung nicht Korrelation (anders als Caffe zum Beispiel). Daher, in Keras Filter wie:

%Vor%

angewendet auf die Matrix:

%Vor%

ergibt eine Matrix:

%Vor%

nicht so, wie man es bei Korrelation erwarten würde:

%Vor%

Damit die Dinge wie erwartet funktionieren, müssen Sie die Filter um 180 Grad drehen. Habe gerade dieses Problem für mich selbst gelöst, hoffentlich wird es dir oder anderen helfen. Prost.

    
bell 25.07.2016, 21:39
quelle