Keras seq2seq模型LSTM维度不匹配 如何调整嵌入层输出形状
错误原因
LSTM层要求输入为3维张量(批量大小, 序列长度, 特征维度),你当前喂给LSTM的是4维张量,多出来的维度基本来自嵌入层的输入或配置错误。
修复步骤
- 确认输入层形状:编码器、解码器的输入层不需要额外加最后一维,正确写法为
# 编码器输入 encoder_inputs = Input(shape=(None,)) # 解码器输入 decoder_inputs = Input(shape=(None,))
如果错误把输入形状设为(None, 1)或者输入数据本身多了最后一个空维度,会导致嵌入层输出多一维变成4维。
- 核对嵌入层写法,不要加多余包装:Keras的Embedding层原生支持序列输入,不需要用
TimeDistributed包裹,正确写法参考:
# 编码器嵌入层,output_dim可根据需求调整为128、256等值 encoder_emb = Embedding(input_dim=num_encoder_tokens, output_dim=256)(encoder_inputs) # 解码器嵌入层 decoder_emb = Embedding(input_dim=num_decoder_tokens, output_dim=256)(decoder_inputs)
此时嵌入层输出形状为(批量大小, 序列长度, 嵌入维度),刚好符合LSTM的3维输入要求,可以直接喂给LSTM层。
- 排查验证:可以在嵌入层调用后增加打印语句确认输出维度:
print(encoder_emb.shape) # 正常输出应为 (None, None, 256) 三个维度,若出现4个维度则往前排查输入或层配置问题
内容的提问来源于stack exchange,提问作者Masoom Raj
相关产品推荐
相关产品推荐

