本文介绍了ValueError:“连接"层要求输入的形状与concat轴一致,但形状必须匹配.得到了输入形状:[(无,523,523,32),等等的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用下面的代码使用tensorflow来连接层,但是遇到了意外错误.我是tensorflow的新手

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 headingBut i have provided the traceback error for referenceAnd 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)]

我已经导入了使用tensorflow.keras

推荐答案

您不能对具有不同尺寸(即高度和宽度)的输入执行串联操作.在您的情况下,您尝试执行此操作layers.Concatenate(axis=3)([x1, x2, x3, x4, x])其中

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)]

错误状态layer requires inputs with matching shapes,这只是输入的高度和宽度.

The error states layer requires inputs with matching shapes, this are nothing but the height and width of the input.

这篇关于ValueError:“连接"层要求输入的形状与concat轴一致,但形状必须匹配.得到了输入形状:[(无,523,523,32),等等的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-26 20:04