Tamaño de dimensión negativo causado al restar 3 de 1 para ‘conv2d_2 / convolution’

Recibí este mensaje de error al declarar la capa de entrada en Keras.

ValueError: Tamaño de dimensión negativo causado al restar 3 de 1 para ‘conv2d_2 / convolution’ (op: ‘Conv2D’) con formas de entrada: [?, 1,28,28], [3,3,28,32].

Mi codigo es asi

model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28))) 

Aplicación de ejemplo: https://github.com/IntellijSys/tensorflow/blob/master/Keras.ipynb

Por defecto, Convolution2D ( https://keras.io/layers/convolutional/ ) espera que la entrada esté en el formato (muestras, filas, columnas, canales), que es “channel-last”. Sus datos parecen estar en el formato (muestras, canales, filas, columnas). Debe poder solucionar este problema utilizando la palabra clave opcional data_format = 'channels_first' al declarar la capa Convolution2D.

 model.add(Convolution2D(32, (3, 3), activation='relu', input_shape=(1,28,28), data_format='channels_first')) 

Tuve el mismo problema y la solución provista en este hilo no me ayudó. Después de pensar mucho, encontré la solución que lo resolvió en mi caso.

Para empezar, aquí está mi código (sé que no es bueno, todavía estoy aprendiendo)

 imageSize=32 classifier=Sequential() classifier.add(Conv2D(64, (3, 3), input_shape = (imageSize, imageSize, 3), activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Conv2D(64, (3, 3), activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Conv2D(64, (3, 3), activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Conv2D(64, (3, 3), activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Conv2D(64, (3, 3), activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) classifier.add(Flatten()) 

Y solo después de pasar por todas las posibilidades, encontré el error:

El tamaño de la imagen es de 32 por 32. Después de la primera capa convolucional, la redujimos a 30 por 30 (creo, si entendí la convolución correctamente)

Luego, la capa de agrupación la reduce a la mitad, por lo que 15 por 15 …

Y así sucesivamente … Al final, mi mapa de características es tan pequeño que mi capa de agrupación (o capa de convolución) es demasiado grande para superarlo , y provoca el error

Por lo tanto, el error se resolvió fácilmente al boost el tamaño de la imagen o reducir las capas convolucionales o de agrupación.

Keras está disponible con la siguiente compatibilidad backend:

TensorFlow: Por Google, Theano: Desarrollado por el laboratorio LISA, CNTK: Por Microsoft

Cuando vea un error con [?, X, X, X], [X, Y, Z, X], es un problema de canal para solucionar este uso del modo automático de Keras:

Importar

 from keras import backend as K K.set_image_dim_ordering('th') 

El formato “tf” significa que los núcleos convolucionales tendrán la forma (filas, columnas, entrada, profundidad y profundidad)

Esto siempre funcionará …