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

4,103 views
Skip to first unread message

Ali MassahKiani

unread,
Dec 29, 2017, 6:29:46 AM12/29/17
to Keras-users
i want train my model with gray levels images but when i want define network this error occur :
ValueError: Input 0 is incompatible with layer conv1_1: expected ndim=4, found ndim=3

network definition is :

def createNetwork():
    odel_vgg
= Sequential()
   
    model_vgg
.add(Conv2D(64,3,strides= (1,1),input_shape = (img_width, img_height), activation='relu', name='conv1_1'))
#     model_vgg.add(ZeroPadding2D((1, 1)))
#     model_vgg.add(Convolution2D(64, 3, 1, activation='relu', name='conv1_2'))
    model_vgg
.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), data_format = 'channels_last'))
   
    model_vgg
.add(Conv2D(128,3,strides= (1,1), activation='relu', name='conv2_1'))
#     model_vgg.add(ZeroPadding2D((1, 1)))
#     model_vgg.add(Convolution2D(128, 3, 1, activation='relu', name='conv2_2'))
    model_vgg
.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),data_format ='channels_last'))
#     model_vgg.add(keras.layers.ActivityRegularization(l1=0.0, l2=1.0))
   
    model_vgg
.add(Conv2D(256, 3,strides= (1,1), activation='relu', name='conv3_1'))
#     model_vgg.add(ZeroPadding2D((1, 1)))
#     model_vgg.add(Convolution2D(256, 3,1, activation='relu', name='conv3_2'))
#     model_vgg.add(ZeroPadding2D((1, 1)))
#     model_vgg.add(Convolution2D(256, 3, 3, activation='relu', name='conv3_3'))
    model_vgg
.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),data_format = 'channels_last'))
   
    model_vgg
.add(Conv2D(512, 3,strides= (1,1), activation='relu', name='conv4_1'))
#     model_vgg.add(ZeroPadding2D((1, 1)))
#     model_vgg.add(Convolution2D(512, 3, 1, activation='relu', name='conv4_2'))
#     model_vgg.add(ZeroPadding2D((1, 1)))
#     model_vgg.add(Convolution2D(512, 3, 1, activation='relu', name='conv4_3'))
    model_vgg
.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),data_format = 'channels_last'))
   
    model_vgg
.add(Conv2D(512,3,strides= (1,1), activation='relu', name='conv5_1'))
    model_vgg
.add(Conv2D(512,3,strides= (1,1), activation='relu', name='conv5_2'))
#     model_vgg.add(ZeroPadding2D((1, 1)))
#     model_vgg.add(Convolution2D(512, 3, 1, activation='relu', name='conv5_3'))
    model_vgg
.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),data_format = 'channels_last'))
   
   
#model_vgg.add(Flatten())
    model_vgg
.add(Dense(64, activation='relu'))
    model_vgg
.add(Dropout(0.5))
    model_vgg
.add(Dense(1, activation='sigmoid'))
   
    model_vgg
.compile(loss='binary_crossentropy',
              optimizer
='adam',
              metrics
=['accuracy'])
   
    model_vgg
.summary(line_length = None, positions = None, print_fn = print)
   
return model_vgg;


Matias Valdenegro

unread,
Dec 29, 2017, 11:21:33 AM12/29/17
to keras...@googlegroups.com

You have to use input_shape = (img_width, img_height, 1) to indicate that it is a grayscale image, meaning one channel.

Ali MassahKiani

unread,
Dec 30, 2017, 1:32:45 AM12/30/17
to Keras-users
i have array of 12055 of gray level images and i change input_shape to (img_width, img_height, 1)  but now this error occur :
ValueError: Error when checking input: expected conv1_1_input to have 4 dimensions, but got array with shape (12025, 32, 32)


Abdessamad Zarra

unread,
Aug 20, 2020, 5:02:33 PM8/20/20
to Keras-users

input_shape=(20,32)  
Reply all
Reply to author
Forward
0 new messages