使用Librosa与模型预测时遇错误:y应为1D数组,却得到形状(1,10)的数组
音频分类预测报错:y应为1D数组,却得到形状(1,10)的数组
执行音频分类预测代码时出现错误提示:y should be a 1d array, got an array of shape (1, 10) instead.
原代码:
filename="UrbanSound8K/car_horn.wav" audio, sample_rate = librosa.load(filename, res_type='kaiser_fast') mfccs_features = librosa.feature.mfcc(y=audio, sr=sample_rate, n_mfcc=40) mfccs_scaled_features = np.mean(mfccs_features.T,axis=0) print(mfccs_scaled_features) mfccs_scaled_features=mfccs_scaled_features.reshape(1,-1) print(mfccs_scaled_features) print(mfccs_scaled_features.shape) predicted_label=model.predict(mfccs_scaled_features) print(predicted_label) prediction_class = labelencoder.inverse_transform(predicted_label) prediction_class
错误原因:
model.predict()返回的是形状为(1,10)的二维数组,对应10个类别的预测概率;而LabelEncoder.inverse_transform()要求输入是1D的类别索引数组,两者形状不匹配导致报错。
解决方法:
通过np.argmax(predicted_label, axis=1)提取概率最大的类别索引,将二维数组转换为1D数组后,再传入inverse_transform()。
修改后的代码:
filename="UrbanSound8K/car_horn.wav" audio, sample_rate = librosa.load(filename, res_type='kaiser_fast') mfccs_features = librosa.feature.mfcc(y=audio, sr=sample_rate, n_mfcc=40) mfccs_scaled_features = np.mean(mfccs_features.T,axis=0) print(mfccs_scaled_features) mfccs_scaled_features=mfccs_scaled_features.reshape(1,-1) print(mfccs_scaled_features) print(mfccs_scaled_features.shape) predicted_label=model.predict(mfccs_scaled_features) print(predicted_label) # 提取概率最大的类别索引,转换为1D数组 predicted_index = np.argmax(predicted_label, axis=1) prediction_class = labelencoder.inverse_transform(predicted_index) print(prediction_class)
内容的提问来源于stack exchange,提问作者harsh.rupapara141
相关产品推荐
相关产品推荐

