在卷积层和密集层之间添加新信息

时间:2017-09-28 10:33:57

标签: python keras

我想将简单分类器的结果与卷积网络的结果混合,以获得更复杂的分类器并进行测试。

现在,我正在使用Inceptionv3 net的keras示例

    base_model = InceptionV3(include_top=False, weights='imagenet', 
    input_shape=(200,200,3))
    x = base_model.output
    x = GlobalAveragePooling2D()(x)
    x = Dense(1024, activation = 'relu')(x)
    predictions = Dense(NUM_CLASSES, activation='softmax')(x)
    model = Model(inputs=base_model.input, outputs=predictions)

我想将从其他分类器获得的类添加到第一个Dense图层的结果中,但不了解如何将其发送到模型。

感谢。

1 个答案:

答案 0 :(得分:0)

你需要一个有两个分支的模型。

input1 = Input(yourInputShape)

按照相同的行,直到您要更改结果密集:

v3out = base_model(input1)
v3out =  GlobalAveragePooling2D()(v3out)
v3out = Dense(1024, activation = 'relu')(v3out)

对其他分类器有类似的构造:

otherOut = other_model(input1)
otherOut = MoreLayers(....)(otherOut)

现在你可以将它们相加,如果它们具有相同的形状,或者将它们连接起来(将一个附加到另一个的末尾)

#sum
joined = Add()([v3Out,otherOut])

#or concatenate
joined = Concatenate()([v3Out,otherOut])

正常完成模型:

predictions = Dense(NUM_CLASSES, activation='softmax')(joined)
model = Model(inputs=input, outputs=predictions)