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

如何为句子级嵌入任务设置LSTM输入形状并解决f1_score计算报错

问题原因与解决办法

核心问题原因

  • 第一,测试集样本数不匹配:1430条样本按0.2的测试集比例计算,测试集样本数应为1430*0.2=286,你观测到y_test.shape为(268,1),说明Y数组在切分前就存在维度异常,或是你在切分后对y_test做了多余的切片、过滤操作。
  • 第二,LSTM输出维度异常:你贴出的代码中LSTM层没有设置return_sequences=True,正常输出维度应该是(样本数, 32),经过Dense层后输出应为(样本数, 1),出现(286,58,1)说明你实际运行的代码和贴出的版本不一致,大概率是LSTM层误加了return_sequences=True参数,导致每个时间步都输出了结果,而非整条序列的最终输出。
  • 第三,预测接口兼容性问题:高版本TensorFlow已经移除了predict_classes方法,使用该接口会导致输出结果格式异常。

分步解决步骤

  • 第一步:修正切分逻辑与维度对齐
    在切分代码后增加维度校验,同时将标签数组压缩为一维,避免多余维度干扰:
    x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2,random_state=42)
    # 新增校验,确保测试集输入和标签样本数一致
    assert x_test.shape[0] == y_test.shape[0], f"测试集样本数不匹配:x_test共{x_test.shape[0]}条,y_test共{y_test.shape[0]}条"
    # 压缩标签数组为一维
    y_train = y_train.ravel()
    y_test = y_test.ravel()
    
    x_train=x_train.reshape(x_train.shape[0],58,1024)
    x_test=x_test.reshape(x_test.shape[0],58,1024)
    
  • 第二步:修正LSTM层配置
    确认LSTM层没有添加return_sequences=True参数,保证输出为整条序列的最终特征:
    model = Sequential()
    # 禁止添加return_sequences=True参数,否则会输出每个时间步的结果
    model.add(LSTM(32, input_shape=(58, 1024)))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    model.fit(x_train, y_train, epochs=5, batch_size=32)
    
  • 第三步:修正预测与F1计算逻辑
    替换已废弃的predict_classes接口,手动将概率输出转为分类结果,同时压缩多余维度:
    # 输出预测概率并压缩为一维
    y_pred = model.predict(x_test).ravel()
    # 按0.5阈值将概率转为二分类标签
    y_pred = (y_pred >= 0.5).astype(int)
    f1 = f1_score(y_test, y_pred)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:57:01