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

Keras使用TokenAndPositionEmbedding层遇Paddings非负错误求助

问题分析与解决方案

错误根源

你遇到的ValueError核心原因是输入序列长度与TokenAndPositionEmbedding层指定的sequence_length不匹配:

  • 你将4个形状为(32,600)的输入拼接后,得到了长度为2400的序列(形状(32,2400))
  • 但你在TokenAndPositionEmbedding中设置了sequence_length=600,位置嵌入层会尝试生成适配600长度的位置编码,当输入序列长度(2400)远大于设定值时,内部的padding操作会出现负数,直接触发错误。

另外你的代码存在变量名错误:拼接后的变量是concatenate,但你传入层的是x,这会导致输入并非你预期的拼接后序列。

修复步骤

  1. 匹配序列长度:将sequence_length改为拼接后的实际序列长度2400
  2. 修正输入变量:把层的输入从x改为concatenate
  3. (可选)如果后续模型有固定长度要求,可调整拼接逻辑或使用keras.layers.Reshape/keras.layers.Cropping1D调整序列长度

修复后的代码示例

concatenate = keras.layers.concatenate(input_layers, axis=1)

# 拼接后输出形状为(32, 2400),对应调整sequence_length为2400
x = keras_nlp.layers.TokenAndPositionEmbedding(
    vocabulary_size=20000,
    sequence_length=2400,  # 修改为实际序列长度
    embedding_dim=256,
    mask_zero=True,
)(concatenate)  # 传入正确的拼接后变量

额外验证

如果单独测试位置嵌入层,可直接传入(32,2400)的张量,设置sequence_length=2400,验证是否正常运行:

test_input = keras.Input(shape=(2400,))
pos_emb = keras_nlp.layers.PositionEmbedding(sequence_length=2400, embedding_dim=256)(test_input)
model = keras.Model(inputs=test_input, outputs=pos_emb)
print(model.predict(np.zeros((32,2400))).shape)  # 应输出(32,2400,256)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:27:14