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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With