首页 > 解决方案 > 如何在预训练的 MobileNetV3 模型之上添加额外的层?

问题描述

我有一个模型,它使用预训练的 MobileNetV3Large 模型并连接类似的 U-net 架构。那不是问题。但我想用这个model2添加model1。在模型 2 中,我只有批量标准化和丢失,我想在模型 2 的顶部添加它们。我尝试了很多东西,但它不能正常工作。任何的想法?!

模型 2

inputs = Input((256,256,3))

# MobileNetV3
mobilenet = MobileNetV3Large(include_top=False, weights="imagenet", input_tensor=inputs)

mobilenet.layers[89]._name = "relu_3"
mobilenet.layers[196]._name = "relu_4"

l4 = mobilenet.get_layer("relu_3").output
b_layer = mobilenet.get_layer("relu_4").output   

up = Conv2DTranspose(256, (2, 2), strides=2, padding="same")(b_layer)
up = Concatenate()([up, l4])
conv = Conv2D(256, (3, 3), activation='relu', padding="same")(up)
conv = Conv2D(256, (3, 3), activation='relu', padding="same")(conv)

#output
outputs = Conv2D(1, 1, padding="same", activation="sigmoid")(conv)

model2 = Model(inputs , outputs)
model2.summary()

模型 1

inputs = Input((256,256,3))

x = Sequential()
x = inputs
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
outputs1 = x

model1 = Model(inputs , outputs1)
model1.summary()

标签: tensorflowkeraspre-trained-modelunity3d-unetmobilenet

解决方案


您可以按功能堆叠模型:

model2 = Model(inputs)
model1 = Model(model2)
model3 = Model(inputs, model1)

您可以按顺序堆叠模型:

model3 = Sequential()
for layer in model2.layers:
    model3.add(layer)

for layer in model1.layers:
    model3.add(layer)

推荐阅读