2017-03-23 1 views
1

J'essaie d'apprendre en utilisant l'apprentissage en profondeur en python pour analyser les données EEG. Malheureusement, je suis également novice en python, alors j'ai essayé de trouver les outils les plus simples disponibles. Cela m'a conduit à Keras.Entrée incorrecte de Conv2D dans Keras

Plus précisément, je suis en train de mettre en œuvre la ligne de conduite suivante:

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

, il me semble donc loin d'être coincé autour de « S1 » ou « C2 ». L'idée à ce jour est:

  • sections d'entrée de données EEG (1 x 6000 est ce que je vais utiliser pour l'instant)

  • course que grâce à 20 filtres 1D (1x200)

  • faire max -pooling sur la sortie de chacun de ces filtrages avec piscine 20, stride 10 (résultant en 20 1x578 points de données)
  • « pile » ceci en 20 x 578 matrice
  • terme, cela grâce à une convolution 2D avec la taille du noyau 20 x 30

Cependant, le code ci-dessous me donne l'erreur suivante:

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')) 

Sortie:

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

Je suis sûr que c'est peccadille, mais en passant par la documentation keras ne m'a pas fait plus sage.

Je me rends compte que ce qui précède saute la procédure d '"empilage", mais la chose la plus proche que j'ai pu trouver était Concatenate, et cela se plaint simplement que je ne lui ai donné aucune entrée.

J'utilise 0.9.0.dev de Théano et KERAS 2.0.2

Répondre

2

Vous devez remodeler vos données avant de 1D à 2D. Il y a dedicated layer à Keras. Je suppose que, votre modèle peut commencer comme ceci:

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')) 

J'ai aussi remplacé input_shape par défaut commande de dimension.