ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 523, 523, 32), etc
You cannot perform concatenate operation of input with different dimension i.e height and width. In your case you are trying to perform this operation layers.Concatenate(axis=3)([x1, x2, x3, x4, x])
where
x1 has dimension = (None, 523, 523, 32)
x2 has dimension = (None, 173, 173, 64)
x3 has dimension = (None, 84, 84, 64)
x4 has dimension = (None, 41, 41, 64)
and x has dimension = (None, 41, 41, 64)
The error occurred because, all of the input dimension i.e height and width to concatenate are different. To solve the error you will have to get all the input to same dimension i.e same height and width, this could be achieved by sampling the layers to a fixed dimension. Based on your use case you could either downsample or upsample to achieve the required dimension.
ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 523, 523, 32), (None, 173, 173, 64), (None, 84, 84, 64), (None, 41, 41, 64), (None, 41, 41, 64)]
The error states layer requires inputs with matching shapes
, this are nothing but the height and width of the input.
Lawlesx
Updated on June 19, 2022Comments
-
Lawlesx almost 2 years
I am trying to concatenate layers Using the following code using tensorflow , but getting an unexpected error. I am new to tensorflow
inp = Input(shape=(1050,1050,3)) x1= layers.Conv2D(16 ,(3,3), activation='relu')(inp) x1= layers.Conv2D(32,(3,3), activation='relu')(x1) x1= layers.MaxPooling2D(2,2)(x1) x2= layers.Conv2D(32,(3,3), activation='relu')(x1) x2= layers.Conv2D(64,(3,3), activation='relu')(x2) x2= layers.MaxPooling2D(3,3)(x2) x3= layers.Conv2D(64,(3,3), activation='relu')(x2) x3= layers.Conv2D(64,(2,2), activation='relu')(x3) x3= layers.Conv2D(64,(3,3), activation='relu')(x3) x3= layers.Dropout(0.2)(x3) x3= layers.MaxPooling2D(2,2)(x3) x4= layers.Conv2D(64,(3,3), activation='relu')(x3) x4= layers.MaxPooling2D(2,2)(x4) x = layers.Dropout(0.2)(x4) o = layers.Concatenate(axis=3)([x1, x2, x3, x4, x]) y = layers.Flatten()(o) y = layers.Dense(1024, activation='relu')(y) y = layers.Dense(5, activation='softmax')(y) model = Model(inp, y) model.summary() model.compile(loss='sparse_categorical_crossentropy',optimizer=RMSprop(lr=0.001),metrics=['accuracy'])
The main error can be seen in the heading But i have provided the traceback error for reference And the error is
ValueError Traceback (most recent call last) <ipython-input-12-31a1fcec98a4> in <module> 14 x4= layers.MaxPooling2D(2,2)(x4) 15 x = layers.Dropout(0.2)(x4) ---> 16 o = layers.Concatenate(axis=3)([x1, x2, x3, x4, x]) 17 y = layers.Flatten()(o) 18 y = layers.Dense(1024, activation='relu')(y) /opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, inputs, *args, **kwargs) 589 # Build layer if applicable (if the `build` method has been 590 # overridden). --> 591 self._maybe_build(inputs) 592 593 # Wrapping `call` function in autograph to allow for dynamic control /opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in _maybe_build(self, inputs) 1879 # operations. 1880 with tf_utils.maybe_init_scope(self): -> 1881 self.build(input_shapes) 1882 # We must set self.built since user defined build functions are not 1883 # constrained to set self.built. /opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/utils/tf_utils.py in wrapper(instance, input_shape) 293 if input_shape is not None: 294 input_shape = convert_shapes(input_shape, to_tuples=True) --> 295 output_shape = fn(instance, input_shape) 296 # Return shapes from `fn` as TensorShapes. 297 if output_shape is not None: /opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/layers/merge.py in build(self, input_shape) 389 'inputs with matching shapes ' 390 'except for the concat axis. ' --> 391 'Got inputs shapes: %s' % (input_shape)) 392 393 def _merge_function(self, inputs): ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 523, 523, 32), (None, 173, 173, 64), (None, 84, 84, 64), (None, 41, 41, 64), (None, 41, 41, 64)]
I have imported all necessary files required to run the code using
tensorflow.keras
-
Lawlesx over 4 yearsOk I will try to do that and inform you