2017-10-01 1 views
1

J'ai créé un CNN dans Keras avec 12 couches Convolutional chacune suivie par BatchNormalization, Activation et MaxPooling. Un échantillon de la couche est:Couche de superposition provoque une erreur dans Keras

model.add(Conv2D(256, (3, 3), padding='same')) 
model.add(BatchNormalization()) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=2)) 

Je commence avec 32 cartes de fonctionnalités et se terminent par 512. Si j'ajoute MaxPooling après chaque couche Conv comme dans le code ci-dessus, je reçois une erreur dans la couche finale:

ValueError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_11/MaxPool' (op: 'MaxPool') with input shapes: [?,1,1,512].

Si j'omets un MaxPooling dans n'importe quelle couche, le modèle compile et commence à s'entraîner. J'utilise Tensorflow comme backend et j'ai la bonne forme d'entrée de l'image dans la première couche.

Y a-t-il des suggestions pour que cela se produise?

+0

Quelle est la forme d'entrée dans la première couche? –

+0

La forme d'entrée est: input_shape = (img_width, img_height, color_channels) en chiffres (256, 256, 3) – Vasilis

Répondre

2

Si vos dimensions spatiales sont de 256x256, vous ne pouvez pas avoir plus de 8 couches Max-Pooling dans votre réseau. Comme 2 ** 8 == 256, après huit sous-échantillonnages multipliés par huit, vos mappages d'entités seront 1x1 dans les dimensions spatiales, ce qui signifie que vous ne pouvez pas effectuer de regroupement maximal car vous obtiendrez des dimensions 0x0 ou négatives.

C'est juste une limitation évidente de Max Pooling mais pas toujours discutée dans les papiers.