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

调用model.summary()显示总参数为0,Keras文本生成LSTM模型求助

问题分析与解决方案

参数显示为0的原因

Keras 3.x(你使用的3.3.3版本)采用延迟构建机制——模型在未接收实际输入数据、未完成权重初始化前,不会真正创建参数张量,因此model.summary()会显示所有层参数为0。

潜在的LSTM层堆叠错误

你的代码中第一个LSTM层默认return_sequences=False,输出是2D张量(batch_size, 150),但第二个LSTM层要求输入为3D张量(batch_size, timesteps, features),直接堆叠会导致运行时错误,需提前修复。


修复后的代码示例

方法1:手动触发模型构建

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense

model = Sequential()
model.add(Embedding(283, 100, input_length=56))
# 第一个LSTM层添加return_sequences=True,返回完整序列供下一层处理
model.add(LSTM(150, return_sequences=True))
model.add(LSTM(150))
model.add(Dense(283, activation='softmax'))

# 手动指定输入形状,触发权重初始化
model.build(input_shape=(None, 56))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.summary()

方法2:喂入测试输入触发构建

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
import numpy as np

model = Sequential()
model.add(Embedding(283, 100, input_length=56))
model.add(LSTM(150, return_sequences=True))
model.add(LSTM(150))
model.add(Dense(283, activation='softmax'))

# 生成符合输入形状的测试数据,触发模型初始化
test_input = np.random.randint(0, 283, (1, 56))
model(test_input)

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.summary()

参数计算验证

修复后各层参数数量符合预期:

  • Embedding层:283 * 100 = 28300(词汇数×嵌入维度)
  • 第一个LSTM层:(100 + 150 + 1) * 4 * 150 = 150600((输入特征+隐藏单元+偏置)×4门控×隐藏单元数)
  • 第二个LSTM层:(150 + 150 + 1) * 4 * 150 = 180600
  • Dense层:150 * 283 + 283 = 42733(输入单元×输出单元+偏置)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:22:38