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

使用LSTM模型预测音频情感时遇输入形状不匹配错误求助

问题解决:LSTM预测时输入维度不匹配错误

核心问题分析

  1. 批量维度缺失:Keras的predict方法要求输入必须包含批量维度(即第一个维度表示样本数量)。你的特征提取函数返回的是(40,1)的单样本数据,但模型期望输入形状为(None,40,1)(None对应批量大小)。
  2. 模型不一致疑点:错误信息提到了conv_lstm2d层,但你定义的模型是普通LSTM。需确认加载的emotionModel和你训练时的模型结构完全一致,避免加载了其他错误模型。

修复步骤

1. 修正特征提取函数,补充批量维度

修改feature函数,在返回前增加批量维度:

def feature(filename):
    y, sr = librosa.load(filename, duration=3, offset=0.5)
    mfcc = np.mean(librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40).T, axis=0)
    X = np.array(mfcc)
    X = np.expand_dims(X, -1)  # 形状变为(40,1)
    X = np.expand_dims(X, 0)   # 增加批量维度,形状变为(1,40,1)
    return X

2. 验证模型结构一致性

如果修改后仍报错,检查emotionModel是否是你训练时的模型:

  • 打印模型结构确认:
print(emotionModel.summary())
  • 确保加载模型时没有误加载其他包含ConvLSTM2D的模型文件,重新保存/加载正确的LSTM模型。

3. 验证输入形状匹配

调用predict前,打印特征形状确认:

def predict_emotion(file):
    ftr = feature(file)
    print(f"输入形状:{ftr.shape}")  # 应输出(1,40,1)
    prediction = emotionModel.predict(ftr)
    print(prediction)

补充说明

训练时的输入X形状应为(样本数,40,1),如果训练时的输入形状不符合,也会导致模型期望的输入维度异常。可通过print(X.shape)确认训练数据的形状是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:18