2017-01-26 3 views
2

Ich verwende Keras Bibliothek, um dieses Deep Learning Modell zu bauen: INPUT (Tiefe = 1, Höhe = 15, Breite = 27) -> CONV [Tiefe = 8] (Höhe = 4, Breite = 27) -> POOL (Höhe = 2, Breite = 1) -> (Regression) Ausgabe.Keras - CNN Modell Zusammenfassung Diemension Interpretation

Ich erwarte, dass die Ausgangsform von convolution2d_1 (None, 8, 12, 1) ist und daher die Ausgangsform von pooling2d_1 (None, 8, 6, 1) ist; während ich (None, 8, 15, 27) bzw. (None, 8, 7, 27) bekomme.

Was mache ich hier oder interpretiere ich falsch?

S.S .: Auch diese Einstellung gibt einen Grundlinienfehler: 99,23%!

print "SHAPE OF INPUT IS:", num_train_3D, depth, height, width 
inp = Input(shape=(depth, height, width)) 
conv_1 = Convolution2D(8, 4, 27, border_mode='same', activation='relu')(inp) 
pool_1 = MaxPooling2D(pool_size=(2, 1))(conv_1) 
''' Now flatten to 1D, apply FC -> ReLU (with dropout) -> softmax ''' 
flat = Flatten()(pool_1) 
out = Dense(1)(flat) #regression 

model = Model(input=inp, output=out) # To define a model, just specify its input and output layers 

print "Model Summary:" 
print model.summary() 

=====================================

SHAPE OF INPUT IS: 53745 1 15 27 
Model Summary: 
____________________________________________________________________________________________________ 
Layer (type)      Output Shape   Param #  Connected to      
==================================================================================================== 
input_1 (InputLayer)    (None, 1, 15, 27)  0            
____________________________________________________________________________________________________ 
convolution2d_1 (Convolution2D) (None, 8, 15, 27)  872   input_1[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_1 (MaxPooling2D) (None, 8, 7, 27)  0   convolution2d_1[0][0]    
____________________________________________________________________________________________________ 
flatten_1 (Flatten)    (None, 1512)   0   maxpooling2d_1[0][0]    
____________________________________________________________________________________________________ 
dense_1 (Dense)     (None, 1)    1513  flatten_1[0][0]     
==================================================================================================== 
Total params: 2,385 
Trainable params: 2,385 
Non-trainable params: 0 

Antwort

2

Ändern Sie border_mode='same' zu border_mode='valid'. Der Randmodus same fügt der Eingabe null hinzu, um sicherzustellen, dass die Ausgabe der Faltungsschicht die gleiche Form wie die Eingabe hat. Mit dem Randmodus valid wird die Faltung nur dort durchgeführt, wo der Eingang und der Filter vollständig überlappen.

+0

Danke, es löst die Dimensionsabweichung; Aber kannst du den Grundlinienfehler von 99,23% kommentieren, ich bekomme immer noch genau dasselbe! – devautor

+0

Es ist schwierig, ohne Details etwas über den Fehler zu sagen. Sprechen Sie über den Trainingsfehler oder den Test? Was ist mit Ihrem Datensatz? Geben Sie ein minimal reproduzierbares Beispiel und alle notwendigen Details an, um ein konstruktives Feedback zum Fehler zu erhalten. Ich würde vorschlagen, dies in einer neuen Frage zu tun, hier geht es um Dimensionen. –

+0

Sicher, ich würde es für einige Zeit selbst ausprobieren und würde es dann tun, wenn nötig :) – devautor