我有一个正在尝试调试的函数,它会产生以下错误消息:
ValueError:“concat”模式只能合并具有匹配输出形状的图层,除了 concat 轴。图层形状:[(None, 128, 80, 256), (None, 64, 80, 80)]
我正在运行一个名为Dstl Satellite Imagery Feature Detection的 Kaggle 竞赛的内核(内核可在此处获得)
这是我在将张量列表合并为单个张量时遇到问题的函数:
def get_unet():
inputs = Input((8, ISZ, ISZ))
conv1 = Convolution2D(32, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(inputs)
conv1 = Convolution2D(32, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2), dim_ordering="th")(conv1)
conv2 = Convolution2D(64, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(pool1)
conv2 = Convolution2D(64, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(conv2)
pool2 = MaxPooling2D(pool_size=(2, 2), dim_ordering="th")(conv2)
conv3 = Convolution2D(128, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(pool2)
conv3 = Convolution2D(128, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(conv3)
pool3 = MaxPooling2D(pool_size=(2, 2), dim_ordering="th")(conv3)
conv4 = Convolution2D(256, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(pool3)
conv4 = Convolution2D(256, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(conv4)
pool4 = MaxPooling2D(pool_size=(2, 2), dim_ordering="th")(conv4)
conv5 = Convolution2D(512, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(pool4)
conv5 = Convolution2D(512, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(conv5)
up6 = merge([UpSampling2D(size=(2, 2), dim_ordering="th")(conv5), conv4], mode='concat', concat_axis=1)
conv6 = Convolution2D(256, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(up6)
conv6 = Convolution2D(256, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(conv6)
up7 = merge([UpSampling2D(size=(2, 2), dim_ordering="th")(conv6), conv3], mode='concat', concat_axis=1)
conv7 = Convolution2D(128, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(up7)
conv7 = Convolution2D(128, 3, 3, activation='relu', border_mode='same')(conv7)
up8 = merge([UpSampling2D(size=(2, 2), dim_ordering="th")(conv7), conv2], mode='concat', concat_axis=1)
conv8 = Convolution2D(64, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(up8)
conv8 = Convolution2D(64, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(conv8)
up9 = merge([UpSampling2D(size=(2, 2), dim_ordering="th")(conv8), conv1], mode='concat', concat_axis=1)
conv9 = Convolution2D(32, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(up9)
conv9 = Convolution2D(32, 3, 3, activation='relu', border_mode='same', dim_ordering="th")(conv9)
conv10 = Convolution2D(N_Cls, 1, 1, activation='sigmoid', dim_ordering="th")(conv9)
model = Model(input=inputs, output=conv10)
model.compile(optimizer=Adam(), loss='binary_crossentropy', metrics=[jaccard_coef, jaccard_coef_int, 'accuracy'])
return model
我正在keras使用TensorFlow后端运行。我的想法是软件版本存在一些兼容性问题(即原始代码已使用一年多)。或者,也许我需要以某种方式重塑数据。
什么可能导致此错误?
这是完整的错误:
Traceback (most recent call last):
File "<ipython-input-1-e8f13915ac9b>", line 1, in <module>
runfile('/Users/aaron/temp/tmp/kaggle_dstl_v3.py', wdir='/Users/aaron/temp/tmp')
File "/Users/aaron/anaconda3/envs/kaggle-dstl-env/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "/Users/aaron/anaconda3/envs/kaggle-dstl-env/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/Users/aaron/temp/tmp/kaggle_dstl_v3.py", line 513, in <module>
model = train_net()
File "/Users/aaron/temp/tmp/kaggle_dstl_v3.py", line 416, in train_net
model = get_unet()
File "/Users/aaron/temp/tmp/kaggle_dstl_v3.py", line 294, in get_unet
up8 = merge([UpSampling2D(size=(2, 2), dim_ordering="th")(conv7), conv2], mode='concat', concat_axis=1)
File "/Users/aaron/anaconda3/envs/kaggle-dstl-env/lib/python3.6/site-packages/keras/legacy/layers.py", line 458, in merge
name=name)
File "/Users/aaron/anaconda3/envs/kaggle-dstl-env/lib/python3.6/site-packages/keras/legacy/layers.py", line 111, in __init__
node_indices, tensor_indices)
File "/Users/aaron/anaconda3/envs/kaggle-dstl-env/lib/python3.6/site-packages/keras/legacy/layers.py", line 191, in _arguments_validation
'Layer shapes: %s' % (input_shapes))
ValueError: "concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 128, 80, 256), (None, 64, 80, 80)]