Also ich versuche this Papier über einen Siamesen neuronales Netzwerk zu implementieren . Ich verwende stattdessen die CIFAR10 dataset mit 10 Klassen.einen siamesischen NN in Keras Implementierung
Die Spezifikationen eines der Beine wird der Einfachheit halber wiedergegeben. Notation: C_x ist eine Faltungsschicht, S_x ist eine Unterabtastschicht und F_x ist eine vollständig verbundene Schicht; mit einem gemeinsamen Index x:
- C1: feature maps: 15, kernel size = (7, 7)
- S2: feature maps: 15, field-of-view = (2, 2)
- C3: feature maps: 45, kernel size = (6, 6)
- S4: feature maps: 45, field-of-view = (4, 3)
- C5: feature maps: 250, kernel size = (5, 5)
- F6 (vollständig verbundene Schicht): keine. von Einheiten = 50
Was habe ich
model = Sequential()
#C1
model.add(Convolution2D(15, 7, 7,
activation='relu',
border_mode='same',
input_shape=input_img_shape))
print("C1 shape: ", model.output_shape)
#S2
model.add(MaxPooling2D((2,2), border_mode='same'))
print("S2 shape: ", model.output_shape)
#...
#C5
model.add(Convolution2D(250, 5, 5,
activation='relu',
border_mode='same'))
print("C5 shape: ", model.output_shape)
#F6
model.add(Dense(50))
Versuche Nachricht Dies wirft eine lange Fehler, die ich glaube, ein reshape Fehler ist. Ein Ausschnitt des Fehlers:
Exception: Input 0 is incompatible with layer dense_13: expected
ndim=2, found ndim=4
Ich weiß, dass das Problem in der letzten dichten Schicht isoliert ist, da der Code läuft glatt, wenn ich kommentiere Sie sich aus. Aber ich bin mir nicht sicher, wie genau ich dann meine endgültige vollständig verbundene Schicht formen/spezifizieren sollte, damit sie mit der früheren Faltungsschicht kompatibel ist.
Einige Orte, die ich
This ist ein verwandtes Problem betrachtet habe, obwohl die Implementierung etwas anders ist (es scheint, dass es zum Zeitpunkt des Schreibens dieses Artikels nicht eine ‚Siamesen‘ in keras Kernschicht). Ich bin mir bewusst, dass es auch implementations in Theano gibt, was ich bedenken werde, wenn ich es einfach nicht in Keras machen kann.
Danke!
Könnte ich konzeptionell fragen, warum Sie eine "abgeflachte" Ebene benötigen? Das ist neu für mich, weil ich es nicht in der Zeitung erwähnt habe. Vielen Dank! – AndreyIto
@AndreyIch dies ist mehr ein Implementierungsdetail: In Keras hat die Ausgabe des Layers 'Convolution2D' 4 Dimensionen [(siehe Quelle)] (https://github.com/fchollet/keras/blob/master/keras/layers /convolutional.py#L248), während die Eingabe des 'Dense' Layers die Dimension 2 [(siehe Quelle)] haben sollte (https://github.com/fchollet/keras/blob/master/keras/layers/core.py # L567). Sie müssen also Ihre Daten mit der Ebene "Flatten" glätten, bevor Sie sie durch die Ebene "Dichte" ziehen. – sytrus