使用LSTM模型预测音频情感时遇输入形状不匹配错误求助
问题解决:LSTM预测时输入维度不匹配错误
核心问题分析
- 批量维度缺失:Keras的
predict方法要求输入必须包含批量维度(即第一个维度表示样本数量)。你的特征提取函数返回的是(40,1)的单样本数据,但模型期望输入形状为(None,40,1)(None对应批量大小)。 - 模型不一致疑点:错误信息提到了
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
相关产品推荐
相关产品推荐

