2016-05-07 5 views
7

Ma forme d'entrée est supposée être 100x100. Cela représente une phrase. Chaque mot est un vecteur de 100 dimensions et il y a 100 mots au maximum dans une phrase.Lorsque je construis un CNN, je reçois des plaintes de Keras qui n'ont aucun sens pour moi.

Je nourris huit phrases au CNN. Je ne suis pas sûr si cela signifie que ma forme d'entrée devrait être 100x100x8 à la place.

Ensuite, les lignes suivantes

Convolution2D(10, 3, 3, border_mode='same', 
         input_shape=(100, 100)) 

se plaint:

entrée 0 est incompatible avec la couche convolution2d_1: attendu ndim = 4, trouvé ndim = 3

Cela n'a pas de sens pour moi ma dimension d'entrée est 2. Je peux passer à travers en changeant input_shape à (100,100,8). Mais le bit "attendu ndim = 4" n'a tout simplement aucun sens pour moi.

Je ne vois pas non plus pourquoi une couche de convolution de 3x3 avec 10 filtres n'accepte pas l'entrée de 100x100.

Même je reçois à travers les plaintes sur le "attendu ndim = 4". Je rencontre un problème dans ma couche d'activation. Il se plaint là:

Impossible d'appliquer softmax à un tenseur qui n'est pas 2D ou 3D. Ici, ndim = 4

Quelqu'un peut-il expliquer ce qui se passe ici et comment le réparer? Merci beaucoup.

Répondre

2

la dimension manquante pour les couches convolutives 2D est la dimension "canal".

Pour les données d'image, la dimension du canal est 1 pour les images en niveaux de gris et 3 pour les images couleur.

Dans votre cas, pour vous assurer que Keras ne se plaindra pas, vous pouvez utiliser la convolution 2D avec 1 canal ou la convolution 1D avec 100 canaux.

Ref: http://keras.io/layers/convolutional/#convolution2d

2

J'ai eu le même problème et je l'ai résolu en ajoutant une dimension pour channel à l'argument input_shape.

Comme je comprends votre Je suggère la solution suivante:

Convolution2D(10, 3, 3, border_mode='same', input_shape=(100, 100, 1))