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

如何使用tf.keras.Model.summary和plot_model显示子模型各层而非单个Sequential层

原因说明

你在定义cnn2时将其封装为独立的tf.keras.Sequential模型,当你将这个模型作为层直接接入融合网络时,Keras默认会将其识别为单个嵌套层,因此summary和模型结构图默认不会展示其内部的独立层结构。

解决方法

方法1:仅在查看summary时展开嵌套层

调用summary时开启expand_nested参数即可打印嵌套模型的内部结构,代码如下:

model.summary(expand_nested=True)

方法2:彻底拆解嵌套层,让内部层直接作为融合模型的一部分

修改fuse_model中调用cnn2的逻辑,将cnn2返回的Sequential模型的内部层依次作用在拼接后的张量上,不需要将整个Sequential作为单个层调用,修改后的代码参考:

def fuse_model(output_channels, lrval=0.0001):
    cnn1_mel = cnn_mls(output_channels, lrval=lrval)
    cnn1_sslm = cnn_sslm(output_channels, lrval=lrval)
    combined = keras.layers.concatenate([cnn1_mel.output, cnn1_sslm.output])
    # 拆解cnn2的内部层
    cnn2_model = cnn2(output_channels, lrval=lrval)
    x = combined
    for layer in cnn2_model.layers:
        x = layer(x)
    cnn2_in = x
    opt = keras.optimizers.Adam(lr=lrval)
    model = keras.models.Model(inputs=[cnn1_mel.input, cnn1_sslm.input], outputs=[cnn2_in])
    model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

    model.summary()
    if not os.path.isfile('Model_Diagram.png'):
        plot_model(model, to_file='Model_Diagram.png', show_shapes=True, show_layer_names=True, expand_nested=True)

    return model

修改后生成的模型和结构示意图都会直接显示cnn2内部的卷积、Dropout等独立层,不会再封装为单个Sequential块。

方法3:模型结构图展开嵌套层

你现有代码里的plot_model已经设置了expand_nested=True,如果你使用的是TensorFlow 2.3及以上版本,该参数会自动生效,不需要额外修改代码即可在生成的模型结构图中看到嵌套Sequential的内部层。如果版本较低不生效,使用方法2拆解层即可解决。

内容的提问来源于stack exchange,提问作者Daniel S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:15:03