调用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
相关产品推荐
相关产品推荐

