
在Keras 3.x(包括TensorFlow内置Keras)中,Embedding层已移除input_length参数,需改用input_shape显式指定输入序列长度,否则会报错“Unrecognized keyword arguments”。
在keras 3.x(包括tensorflow内置keras)中,`embedding`层已移除`input_length`参数,需改用`input_shape`显式指定输入序列长度,否则会报错“unrecognized keyword arguments”。
Keras 3.x(自2023年发布的Keras 3.0起)进行了重大API重构,全面转向多后端(TensorFlow、JAX、PyTorch)统一设计。在此版本中,Embedding层的构造参数已精简并标准化:input_length 已被正式弃用,不再接受为关键字参数。官方文档中若仍出现该参数,多为未及时同步的遗留示例或文档渲染错误。
正确做法是通过 input_shape 参数声明输入张量的形状(不包含batch维度)。对于一维整数序列(如词索引序列),input_shape 应设为 (max_sequence_length,),Keras将据此自动推导权重矩阵形状 (input_dim, output_dim) 并完成初始化。
✅ 正确写法(Keras 3.x / tf.keras 2.16+):
import keras
model = keras.Sequential()
input_dim = 3 # 词汇表大小(最大索引+1)
output_dim = 1 # 每个词嵌入的维度
max_len = 10 # 序列最大长度(即 input_length 的等效含义)
model.add(
keras.layers.Embedding(
input_dim=input_dim,
output_dim=output_dim,
input_shape=(max_len,) # ✅ 关键:用 input_shape 替代 input_length
)
)
model.summary()
⚠️ 注意事项:
- input_shape 是元组,必须包含逗号(如 (10,)),不可写作 (10)(后者是整数而非元组);
- input_shape 指定的是单个样本的形状(不含 batch 维度),例如 (10,) 表示每个样本是长度为10的整数序列;
- 若后续接 LSTM 或 GRU 等循环层,通常需确保输入已填充(padding)至统一长度,max_len 即该固定长度;
- 不再需要手动设置权重——Keras会在调用 build() 或首次 fit() 时自动初始化可训练嵌入矩阵;
- 若使用函数式API,input_shape 可在 Input 层中指定,Embedding 层则无需重复传入。
? 补充说明:在旧版 Keras 2.x 中,input_length 曾用于辅助计算输出形状,但实际常被忽略(因模型可通过输入数据动态推断);Keras 3.x 通过更一致的 input_shape 机制消除了这一冗余,提升了API清晰度与跨后端兼容性。
请务必检查当前环境的 Keras 版本:运行 import keras; print(keras.__version__),若 ≥3.0.0,则严格遵循上述 input_shape 方式即可彻底解决该报错。










