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

在Keras中使用多骨干网络迁移学习遇层名重复错误的解决方法

解决多骨干网络层名重复问题

问题原因

同时加载DenseNet121和ResNet50时,两个模型内部存在命名相同的层(比如conv2_block1_1_conv),而Keras要求所有层名称必须唯一,因此触发报错。

解决方法

方法一:实例化模型时添加命名前缀(推荐)

加载预训练模型时,通过name参数为每个模型添加专属前缀,Keras会自动为模型内所有层加上该前缀,确保层名唯一。

修改后的代码:

model_input = keras.Input(shape=(image_size, image_size, 3))

# 为DenseNet121添加命名前缀
densenet121 = keras.applications.DenseNet121(
    weights="imagenet", include_top=False, input_tensor=model_input,
    name="densenet121"
)

# 为ResNet50添加命名前缀
resnet50 = keras.applications.ResNet50(
    weights="imagenet", include_top=False, input_tensor=model_input,
    name="resnet50"
)

# 直接从各自模型中获取目标层输出,无需修改层名
input_b = resnet50.get_layer("conv2_block3_2_relu").output
input_d = densenet121.get_layer("conv2_block6_1_relu").output

model_output = layers.Concatenate(axis=-1)([input_b, input_d])

keras.Model(inputs=model_input, outputs=model_output)

方法二:手动遍历修改层名

如果不需要为整个模型添加前缀,可以手动遍历每个模型的层,修改层名以避免冲突:

model_input = keras.Input(shape=(image_size, image_size, 3))

densenet121 = keras.applications.DenseNet121(
    weights="imagenet", include_top=False, input_tensor=model_input 
)
# 为DenseNet121的所有层添加前缀
for layer in densenet121.layers:
    layer._name = f"densenet121_{layer.name}"

resnet50 = keras.applications.ResNet50(
    weights="imagenet", include_top=False, input_tensor=model_input 
)
# 为ResNet50的所有层添加前缀
for layer in resnet50.layers:
    layer._name = f"resnet50_{layer.name}"

# 获取层输出时使用修改后的名称
input_b = resnet50.get_layer("resnet50_conv2_block3_2_relu").output
input_d = densenet121.get_layer("densenet121_conv2_block6_1_relu").output

model_output = layers.Concatenate(axis=-1)([input_b, input_d])

keras.Model(inputs=model_input, outputs=model_output)

注意事项

  • 方法一为官方推荐方式,无需手动修改层名,Keras会自动处理命名空间,更简洁可靠。
  • 使用方法二时,获取层输出必须对应修改后的层名,否则会找不到目标层。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:52:47