试图在keras中为CNN模型添加一个输入层



我试图将输入添加到并行路径cnn,以创建一个剩余的架构,但我得到了维度不匹配。


from keras import layers, Model
input_shape = (128,128,3) # Change this accordingly
my_input = layers.Input(shape=input_shape) # one input
def parallel_layers(my_input, parallel_id=1):
x = layers.SeparableConv2D(32, (9, 9), activation='relu', name='conv_1_'+str(parallel_id))(my_input)
x = layers.MaxPooling2D(2, 2)(x)
x = layers.SeparableConv2D(64, (9, 9), activation='relu', name='conv_2_'+str(parallel_id))(x)
x = layers.MaxPooling2D(2, 2)(x)
x = layers.SeparableConv2D(128, (9, 9), activation='relu', name='conv_3_'+str(parallel_id))(x)
x = layers.MaxPooling2D(2, 2)(x)
x = layers.Flatten()(x)
x = layers.Dropout(0.5)(x)
x = layers.Dense(512, activation='relu')(x)
return x
parallel1 = parallel_layers(my_input, 1)
parallel2 = parallel_layers(my_input, 2)
concat = layers.Concatenate()([parallel1, parallel2])
concat=layers.Add()(concat,my_input)
x = layers.Dense(128, activation='relu')(concat)
x = Dense(7, activation='softmax')(x)
final_model = Model(inputs=my_input, outputs=x)
final_model.fit_generator(train_generator, steps_per_epoch = 
nb_train_samples // batch_size, epochs = epochs, validation_data = validation_generator,
validation_steps = nb_validation_samples // batch_size) 

我得到错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-163442df0d4c> in <module>()
1 concat = layers.Concatenate()([parallel1, parallel2])
----> 2 concat=layers.Add()(concat,my_input)
3 x = layers.Dense(128, activation='relu')(parallel2)
4 x = Dense(7, activation='softmax')(x)
5 
TypeError: __call__() takes 2 positional arguments but 3 were given

我使用的是keras 2.1.6版本。请帮助解决此问题final_model.summary((

以这种方式定义您的添加层

concat=layers.Add()([concat,my_input])

您必须删除以下行:

concat=layers.Add()(concat,my_input)

这没有任何意义。您有一个方法,它接受一个输入,分支到两个并行模型中。它们两者的输出(parallel1parallel2(都是长度为512的矢量。然后,您可以将Concatenate它们的长度设置为1024,或者将Add它们的长度再次设置为512。CCD_ 8然后通过另外的CCD_ 9层。

简而言之,删除以下行:

concat=layers.Add()(concat,my_input)

如果你想连接并有一个长度为1024的矢量,请保持代码的其余部分不变,否则,如果你想添加它们并有长度为512的矢量,则替换以下行:

concat = layers.Concatenate()([parallel1, parallel2])

这个:

concat = layers.Add()([parallel1, parallel2])

相关内容

最新更新