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

如何可视化含TimeDistributed层的Keras模型,展开显示内部CNN结构?

解决方案

方案1:调整Keras自带plot_model参数直接展开嵌套层

你之前使用tf.keras.utils.plot_model没有展开子结构是因为默认关闭了嵌套层展开选项,添加expand_nested=True参数即可显示TimeDistributed层包裹的CNN子模型内部结构,示例代码如下:

from tensorflow.keras.utils import plot_model

plot_model(
    model,
    to_file="model_visual.png",
    show_shapes=True,
    show_layer_activations=True,
    expand_nested=True, # 核心参数,展开所有嵌套子模型
    dpi=200
)

这个方法不需要改动你的原有网络代码,生成的图会直接显示TimeDistributed内部的BatchNormalization、Flatten、Dense等层结构。

方案2:手动展开时间步显式显示每个输入对应的独立CNN分支

如果需要显式看到3个输入图像各自对应的独立CNN分支,可以临时修改网络结构,把TimeDistributed按时间步拆分后再生成可视化图,验证后改回原有TimeDistributed的写法即可,示例逻辑如下:

# 临时展开TimeDistributed用于可视化
input_sequence1 = Input(shape=(nbr_img, new_img_size, new_img_size, 3))
# 拆分3个时间步的输入,分别调用cnn1
step1_cnn = cnn1(input_sequence1[:,0,:,:,:])
step2_cnn = cnn1(input_sequence1[:,1,:,:,:])
step3_cnn = cnn1(input_sequence1[:,2,:,:,:])
# 组合后输入LSTM
lstm_input = tf.stack([step1_cnn, step2_cnn, step3_cnn], axis=1)
lstm1 = LSTM(1024, activation='relu', return_sequences=False)(lstm_input)
# 后半部分网络逻辑保持不变,生成模型后再用plot_model画图即可

生成的图会直接显示3个并行的CNN分支,完全符合你要的展开效果。

方案3:使用visualkeras生成自定义风格的结构图

如果需要类似参考示例的彩色美观风格,可以使用visualkeras库,它支持自定义层配色、尺寸,同样支持展开嵌套层,示例代码如下:

import visualkeras
from PIL import ImageFont

# 设置字体(可选,调整标注大小)
font = ImageFont.truetype("arial.ttf", 12)
visualkeras.layered_view(
    model,
    to_file='model_colored.png',
    expand_nested=True,
    font=font,
    legend=True
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:02