在 keras 中合并层(连接)

shu*_*nyo 2 conv-neural-network keras

我正在尝试实现这篇论文(模型架构在下面给出)并且有两个模型 -coarse_model并且fine_model需要在精细模型的第二步连接。但是,当我尝试使用最后一个轴进行连接时出现错误。 在此处输入图片说明


from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense, Merge
from keras.layers.core import Reshape
from keras.layers.merge import Concatenate
from keras import backend as K


# dimensions of our images
#img_width, img_height = 320, 240

img_width, img_height = 304,228


if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3)

# coarse model
coarse_model = Sequential()
# coarse layer 1
coarse_model.add(Conv2D(96,(11,11),strides=(4,4),input_shape=input_shape,activation='relu'))
coarse_model.add(MaxPooling2D(pool_size=(2, 2)))
# coarse layer 2
coarse_model.add(Conv2D(256,(5,5),activation='relu',padding='same'))
coarse_model.add(MaxPooling2D(pool_size=(2, 2)))
# coarse layer 3
coarse_model.add(Conv2D(384,(3,3),activation='relu',padding='same'))
# coarse layer 4
coarse_model.add(Conv2D(384,(3,3),activation='relu',padding='same'))
# coarse layer 5
coarse_model.add(Conv2D(256,(3,3),activation='relu',padding='same'))
coarse_model.add(Flatten())
# coarse layer 6
coarse_model.add(Dense(4096,activation='relu'))
# coarse layer 7
coarse_model.add(Dense(4070,activation='linear'))

# fine model
fine_model = Sequential()
fine_model.add(Conv2D(63,(9,9),strides=(2,2),input_shape=input_shape,activation='relu'))
fine_model.add(MaxPooling2D(pool_size=(2, 2)))

# reshape coarse model to shape of fine model
shape = fine_model.layers[1].output_shape
shape_subset = (shape[1],shape[2])


coarse_model.add(Reshape(shape_subset))
model = Sequential()
model.add(Merge([coarse_model.layers[10],fine_model.layers[1]],mode='concat',concat_axis=3))
Run Code Online (Sandbox Code Playgroud)

最后一行给出的错误是:*** ValueError:“concat”模式只能合并具有匹配输出形状的层,除了 concat 轴。图层形状:[(None, 74, 55), (None, 74, 55, 63)]

shu*_*nyo 5

要回答我自己的问题,将形状更改为

shape_subset = (shape[1],shape[2],1)
Run Code Online (Sandbox Code Playgroud)

model.add(Merge([coarse_model.layers[10],fine_model.layers[1]],mode='concat',concat_axis=-1))
Run Code Online (Sandbox Code Playgroud)

使代码工作。