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

训练LSTM多标签模型遇ValueError:缺少embedding_15_input数据

嘿,这个报错我太熟了——本质就是你的模型在喊“我要的输入数据没收到啊!”,具体来说它需要名为embedding_15_input的输入,但你训练时传的数据没对应上这个名字。咱们一步步来排查解决:

问题根源

Keras自动给你的第15个Embedding层生成了embedding_15_input这个输入名称,但你在训练时没有把数据和这个名称做绑定,导致模型找不到对应的数据。

解决步骤

1. 修正训练时的数据传入方式

直接在model.fit()里用字典映射输入名称和训练数据,确保模型能找到它要的输入:

# 假设你的训练特征数据是train_x,标签是train_y
model.fit(
    x={'embedding_15_input': train_x},
    y=train_y,
    batch_size=20,
    epochs=10,
    # 其他参数如validation_data等
)

如果你之前是直接传model.fit(train_x, train_y...),就会出现这个问题——因为当模型有明确命名的输入时,必须显式指定映射关系。

2. 可选:显式定义输入层,避免自动命名混乱

你现在用的是Sequential链式构建模型,Keras会自动给层生成名称,容易出现这种“数字后缀”的命名歧义。可以改用Functional API显式定义输入层,自己控制输入名称:

def lstm_twiter(n_input, n_out, input_dim, units_activation='tanh', batch_size=20 ):
    # 显式定义输入层,自定义名称
    inputs = Input(shape=(n_input,), name='text_sequence_input')
    embedding_size_out = min(50, input_dim//2)
    # 连接Embedding层
    x = Embedding(
        input_dim=input_dim,
        output_dim=embedding_size_out,
        activation=units_activation
    )(inputs)
    # 后续添加LSTM、全连接层等
    x = LSTM(64)(x)
    # 多标签分类建议用sigmoid激活
    outputs = Dense(n_out, activation='sigmoid')(x)
    model = Model(inputs=inputs, outputs=outputs)
    return model

这样训练时就可以用更清晰的名称传入数据:

model.fit(x={'text_sequence_input': train_x}, y=train_y, ...)

3. 验证数据形状是否匹配

最后别忘了检查你的训练数据train_x的形状:Embedding层要求输入是二维数组,格式为(样本数量, 序列长度),也就是每个样本是一个整数索引序列(对应词汇表中的词)。可以用print(train_x.shape)确认,确保和你传入的n_input参数一致——形状不匹配也可能间接引发这个输入找不到的报错。

内容的提问来源于stack exchange,提问作者Mo Abdolhosseini Moghaddam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:24:55