You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在预训练MobileNetV3搭建的U-net模型顶部添加BN与Dropout额外层?

解决方案

核心逻辑

运行失败的核心原因是两个模型各自定义了独立的输入层,张量计算流没有正确串联。只需要将Model1的输出作为Model2的输入,替换掉Model2原本的独立输入层即可实现堆叠。

完整可运行代码

from tensorflow.keras.layers import Input, Conv2DTranspose, Concatenate, Conv2D, BatchNormalization, Dropout
from tensorflow.keras.applications import MobileNetV3Large
from tensorflow.keras.models import Model

# 第一步:定义Model1
input_shape = (256,256,3)
inputs = Input(input_shape)
x = BatchNormalization()(inputs)
x = Dropout(0.5)(x)
model1 = Model(inputs, x)

# 第二步:定义Model2,输入直接使用Model1的输出,不再新建独立Input层
mobilenet = MobileNetV3Large(include_top=False, weights="imagenet", input_tensor=model1.output)

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)
outputs = Conv2D(1, 1, padding="same", activation="sigmoid")(conv)

# 第三步:串联两个模型,指定整体输入为Model1的输入,输出为Model2的输出
combined_model = Model(inputs=model1.input, outputs=outputs)
combined_model.summary()

注意事项

  • 如果你已经提前训练好了Model2的权重,加载权重时需要跳过输入层相关的参数,避免形状不匹配报错
  • MobileNetV3的预训练权重是基于ImageNet的归一化输入分布训练的,新增的BatchNormalization层初始阶段建议设置较小的学习率,避免破坏预训练特征的分布
  • 推理阶段Dropout层会自动关闭,不需要额外手动调整

内容的提问来源于stack exchange,提问作者MSI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:51:01