m0_59122532 2024-05-09 15:27 采纳率: 0%
浏览 206

ValueError: operands could not be broadcast together with shapes (1,1025) (0,) 报错

在网上找了语音情感分析的代码,带入自己的数据集怎么样都会报错,通过gpt每一步都统一了维数,还是没用,真的很崩溃,机器学习要我命
ValueError: operands could not be broadcast together with shapes (1,1025) (0,)
这个报错到底是为什么呀,调了一下好像是mel的原因导致维数不一致,但怎么调都是这个报错,真的要feng了

img

涉及到mfcc特征提取的两个函数:


```python
def compute_mfcc(y, sr, n_mfcc=16, n_fft=2048, hop_length=512, n_mels=128):
    # 1. 预处理音频数据
    S = librosa.feature.melspectrogram(y=y, sr=sr, n_fft=n_fft, hop_length=hop_length, n_mels=n_mels)
    log_S = librosa.power_to_db(S, ref=np.max)
    # 2. 计算 MFCC
    mfcc = fftpack.dct(log_S, axis=0, type=2, norm='ortho')[:n_mfcc]
    # 3. 可能的话,对 MFCC 进行降维处理(这里设不进行降维处理)
    return mfcc
# 特征提取函数
def getFeature(file_path, mfcc_feature_num=16):
    y, sr = librosa.load(file_path)
    mfcc = compute_mfcc(y, sr, n_mfcc=mfcc_feature_num)  # 提取MFCC特征
    print("MFCC feature shape:", mfcc.shape)# 输出MFCC特征形状
    zcr_feature = librosa.feature.zero_crossing_rate(y,frame_length=len(mfcc))
    energy_feature = librosa.feature.rms(y,frame_length=len(mfcc))
    rms_feature = librosa.feature.rms(y,frame_length=len(mfcc))
    # 确保其他特征的维度与MFCC特征的时间步长一致
    zcr_feature = np.expand_dims(zcr_feature.T, axis=1)
    energy_feature = np.expand_dims(energy_feature.T, axis=1)
    rms_feature = np.expand_dims(rms_feature.T, axis=1)  # 添加一个维度以匹配时间步
    # 对提取的特征进行处理
    data_feature = np.concatenate((mfcc, zcr_feature, energy_feature, rms_feature), axis=1)
    return data_feature


```

  • 写回答

2条回答 默认 最新

  • 笑面虎 2024-05-09 15:36
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【问题概括】:你遇到的问题是在尝试使用一个语音情感分析的代码时,出现了一个维度不匹配的错误。这个错误提示你在使用 librosa.feature.melspectrogram 函数时,两个操作数无法进行广播操作,因为它们的形状不兼容。

    【图片内容】:你上传的图片显示了一个 Python 错误信息,这个错误发生在尝试计算梅尔频谱图(Mel-Spectrogram)时。错误信息指出在执行 filters.me 函数时,两个操作数无法匹配,其中一个操作数的形状是 (1,1025) 而另一个是 (0,)。

    【问题出现原因】:这个错误通常是由于输入数据的形状或者参数设置不正确导致的。在你的代码中,可能是 sr(采样率)、n_fft(短时傅里叶变换的窗口大小)、hop_length(hop length,即步长)或者 n_mels(梅尔滤波器的数量)中的一个或多个参数设置不正确,导致在计算梅尔滤波器时出现了问题。

    【问题解决方案】:为了解决这个问题,你需要确保所有传递给 librosa.feature.melspectrogram 函数的参数都是正确的,并且与你的音频数据集兼容。以下是一些可能的解决步骤:

    1. 确保 sr 参数是正确的,它应该是你的音频数据的采样率。
    2. 检查 n_fft 参数是否适合你的音频数据,它通常设置为 2048 或者 1024。
    3. hop_length 应该小于 n_fft,并且是一个合理的步长值,以便能够捕捉到音频信号的细节。
    4. n_mels 参数应该根据你想要从音频信号中提取的梅尔频谱的数量来设置。

    【提供代码】:由于你没有提供完整的代码和数据集,我将提供一个修改后的 compute_mfcc 函数的示例,这个函数使用了正确的参数检查:

    import librosa
    import numpy as np
    import scipy.fftpack
    
    def compute_mfcc(y, sr, n_mfcc=16, n_fft=2048, hop_length=512, n_mels=128):
        # 确保 y 是一维的
        if y.ndim > 1:
            y = y[:, 0]
        
        # 1. 预处理音频数据
        S = librosa.feature.melspectrogram(y=y, sr=sr, n_fft=n_fft, hop_length=hop_length, n_mels=n_mels)
        
        # 确保 S 不是空的
        if S.shape[0] == 0:
            raise ValueError("Mel-Spectrogram is empty, check your parameters")
        
        log_S = librosa.power_to_db(S, ref=np.max)
        # 2. 计算 MFCC
        mfcc = scipy.fftpack.dct(log_S, axis=0, type=2, norm='ortho')[:n_mfcc]
        # 3. 返回 MFCC 特征
        return mfcc
    
    # 其他函数和代码保持不变
    

    【代码运行方式】:你需要在你的 Python 环境中安装 librosascipy 库。你可以通过运行 pip install librosa scipy 来安装它们。然后,你可以运行上述代码,传入你的音频文件路径和采样率。

    【代码预期运行结果】:如果代码正确运行,它将不会抛出任何错误,并且会返回一个 MFCC 特征数组。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月9日