web-dev-qa-db-fra.com

Lors de la construction d'un CNN, je reçois des plaintes de Keras qui n'ont pas de sens pour moi.

Ma forme d'entrée est censé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.

Je donne huit phrases au CNN, je ne sais pas 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:

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

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

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

Même moi j'obtiens à travers les plaintes sur le "ndim attendu = 4". Je rencontre des problèmes dans ma couche d'activation. Là, il se plaint:

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

Quelqu'un peut-il expliquer ce qui se passe ici et comment y remédier? Merci beaucoup.

14
user4343712

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

Je suggère la solution suivante:

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

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 en 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.

Réf: http://keras.io/layers/convolutional/#convolution2d

9
dontloo