【问题标题】:Stacking Ensenble Convolutional Neural Networks堆叠 Ensenble 卷积神经网络
【发布时间】:2021-10-24 06:21:39
【问题描述】:

我有一些预先训练的模型,我想将它们堆叠在一起。我的输入是 (224,224,3) 图像,类似于 1000 张图像。我的 y 是 (1000,2) 形状,类似于 ([0,1],[1,0],[0,1]...[1,0])。这是CNNs

base_Neural_Net=MobileNetV2(input_shape=(224,224,3), weights='imagenet', include_top=False)
Mobile_V2=Sequential()
Mobile_V2.add(base_Neural_Net)
Mobile_V2.add(Flatten())
Mobile_V2.add(BatchNormalization())
Mobile_V2.add(Dense(256,kernel_initializer='he_uniform'))
Mobile_V2.add(BatchNormalization())
Mobile_V2.add(Activation('relu'))
Mobile_V2.add(Dropout(0.5))
Mobile_V2.add(Dense(2,activation='softmax'))

for layer in base_Neural_Net.layers:
layer.trainable = False

c1=PlotLossesKeras()
Mobile_V2.compile(optimizer='adam',loss='categorical_crossentropy', metrics=['accuracy','AUC'])
Mobile_V2.fit(x,y,epochs=10,callbacks=[c1,c3],batch_size=10)

base_Neural_Net=DenseNet121(input_shape=(224,224,3), weights='imagenet', include_top=False)
Dense_121=Sequential()
Dense_121.add(base_Neural_Net)
Dense_121.add(Flatten())
Dense_121.add(BatchNormalization())
Dense_121.add(Dense(256,kernel_initializer='he_uniform'))
Dense_121.add(BatchNormalization())
Dense_121.add(Activation('relu'))
Dense_121.add(Dropout(0.5))
Dense_121.add(Dense(2,activation='softmax'))

for layer in base_Neural_Net.layers:
layer.trainable = False

c1=PlotLossesKeras()
Dense_121.compile(optimizer='adam',loss='categorical_crossentropy', metrics=['accuracy','AUC'])
Dense_121.fit(x,y,epochs=10,callbacks=[c1,c3],batch_size=16)

base_Neural_Net= InceptionResNetV2(input_shape= (224,224,3), weights='imagenet', include_top=False)
Res_V2=Sequential()
Res_V2.add(base_Neural_Net)
Res_V2.add(Flatten())
Res_V2.add(BatchNormalization())
Res_V2.add(Dense(256,kernel_initializer='he_uniform'))
Res_V2.add(BatchNormalization())
Res_V2.add(Activation('relu'))
Res_V2.add(Dropout(0.5))
Res_V2.add(Dense(2,activation='softmax'))

for layer in base_Neural_Net.layers:
    layer.trainable = False

c1=PlotLossesKeras()
Res_V2.compile(optimizer='adam',loss='categorical_crossentropy', metrics=['accuracy','AUC'])
Res_V2.fit(x,y,epochs=10,callbacks=[c1,c3],batch_size=16)

estimators_model = [
('Mobile_V2', Mobile_V2),
('Res_V2', Res_V2),
('Dense_121', Dense_121)
]

我怎样才能ensenble他们?

【问题讨论】:

    标签: python tensorflow keras conv-neural-network ensemble-learning


    【解决方案1】:

    在集成中使用模型的最简单方法是在数据上分别运行它们并收集每个模型的输出,然后平均总数。如果您希望结果是离散值 {0, 1},您可以根据阈值进行转换。

    您也可以构建一个组合网络来执行此操作,但这涉及更多。您需要使用 Keras 功能 api 来构建一个新模型,并将这些作为组件,每个都采用相同的输入。然后,您将对组合模型中的输出进行平均,并根据需要进行转换。

    【讨论】:

      【解决方案2】:

      同意@dennis-sosnoski,如果你想同时训练一个 CNN 集合,那么你可以简单地创建一个多输入模型,其中每个输入管道由一个独特的 CNN 模型组成,最后你需要加入他们并给出一个预测。一年前我做过类似的事情,见下图,

      点击Here也可以查看代码。

      【讨论】:

        猜你喜欢
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-01
        • 2020-10-07
        • 2020-10-19
        • 2020-10-19
        • 2018-05-01
        相关资源
        最近更新 更多