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

如何查看已训练LSTM模型各层的权重?附模型代码示例

加载并查看LSTM模型各层权重的方法

一、先确保模型结构与训练时一致

加载权重前,必须保证当前定义的模型结构和训练保存权重时完全一致——包括层类型、单元数、输入形状、return_sequences参数等,否则会加载失败。你的代码已经正确还原了模型结构,这一步没问题。

二、修正权重路径并加载

注意Windows系统的路径需要转义,避免单斜杠被识别为转义字符,推荐两种写法:

# 方法1:使用原始字符串(前缀加r)
weightsfile = r"C:\Users\...\weights-improvement.hdf5"
# 方法2:使用双反斜杠
weightsfile = "C:\\Users\\...\\weights-improvement.hdf5"

# 加载权重并重新编译模型
model.load_weights(weightsfile)
model.compile(loss='categorical_crossentropy', optimizer='adam')

三、查看各层权重的两种方法

方法1:遍历所有层,批量查看

循环遍历模型的每一层,通过get_weights()获取权重参数(无训练参数的层如Dropout会返回空列表),可选择打印形状或具体数值:

for idx, layer in enumerate(model.layers):
    print(f"=== 第{idx+1}层:{layer.name} ===")
    weights = layer.get_weights()
    if not weights:
        print("该层无训练权重(如Dropout层)\n")
        continue
    # 打印每个权重数组的形状
    for w_idx, w_arr in enumerate(weights):
        print(f"参数{w_idx+1}形状:{w_arr.shape}")
        # 如需查看具体数值,取消下面注释
        # print(f"参数{w_idx+1}数值:\n{w_arr}\n")
    print("\n")

方法2:查看指定层的权重

如果只关注某一层(比如第一个LSTM层),可以直接通过索引定位后查看:

# 获取第一个LSTM层(索引为0)
target_layer = model.layers[0]
layer_weights = target_layer.get_weights()

print("第一个LSTM层权重结构:")
# LSTM层包含输入/遗忘/更新/输出门的权重与偏置,共8个数组
for w_idx, w_arr in enumerate(layer_weights):
    print(f"门控参数{w_idx+1}形状:{w_arr.shape}")

补充说明

  • Dropout层仅做随机失活操作,没有可训练的权重参数,属于正常现象。
  • LSTM层的权重数组对应不同门控的参数,Dense层则只有权重矩阵和偏置向量两组参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:57:46