2017-03-23 4 views
1

Ich versuche zu lernen, mithilfe von Deep Learning in Python EEG-Daten zu analysieren. Leider bin ich auch neu bei Python, also habe ich versucht, die einfachsten verfügbaren Tools zu finden. Das hat mich zu Keras geführt.Falscher Eingang zu Conv2D in Keras

Genauer gesagt, ich versuche, die folgende Rohrleitung zu implementieren:

EEG analysis net from https://arxiv.org/abs/1610.01683

Bisher scheine ich um „S1“ festzustecken oder „C2“. Die Idee ist so weit:

  • Eingangsabschnitte von EEG-Daten (1 x 6000 ist, was ich jetzt verwenden)

  • ausführen, die durch 20 1D-Filter (1x200)

  • max tun -Pooling auf dem Ausgang jedes dieser Filterungen mit Pool 20, Schritt 10 (Ergebnis in 20 1x578 Datenpunkten)
  • "stapeln" dies in eine 20 x 578 Matrix
  • führen Sie dies durch eine 2D-Faltung mit Kerngröße 20 x 30

jedoch der folgende Code gibt mir die folgende Fehlermeldung:

model = Sequential() 
model.add(Conv1D(input_shape=(1,6000), kernel_size=200,strides=1, 
       activation='sigmoid',filters=20)) 
model.add(MaxPooling1D(pool_size=20, strides=10,padding='same')) 
model.add(Conv2D(filters=400,kernel_size=(20,30),strides=(1,1),activation='sigmoid')) 

Ausgang:

ValueError: Input 0 is incompatible with layer conv2d_4: expected ndim=4, found ndim=3 

Ich bin sicher, dass dieser trivialer Fehler ist, sondern durch die keras Dokumentation gehen hat mich nicht gemacht jeder weiser.

Ich weiß, das obige überspringt die "Stacking" -Prozedur, aber die nächste Sache, die ich dazu finden konnte, war Concatenate, und das beschwert sich gerade, dass ich keine Eingaben gegeben habe.

Ich bin mit Theano 0.9.0.dev und Keras 2.0.2

Antwort

2

Sie müssen Ihre Daten neu zu gestalten, bevor sie von 1D bis 2D gehen. Es gibt dedicated layer in Keras. Ich denke, Ihr Modell wie folgt beginnen kann:

model = Sequential() 
model.add(Conv1D(input_shape=(6000,1),kernel_size=200,strides=1, 
      activation='sigmoid',filters=20)) 
model.add(MaxPooling1D(pool_size=20, strides=10,padding='same')) 
model.add(Reshape((-1, 581, 20))) 
model.add(Conv2D(filters=400,kernel_size=(20,30),strides=(1,1), 
      activation='sigmoid')) 

Ich habe auch input_shape ersetzt Dimension Bestellung auf die Standard.

Verwandte Themen