问题描述
我正在尝试使用下面的代码使用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),等等的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!