【问题标题】:Reshaping an Audio file array in python for Neural Network input在 python 中为神经网络输入重塑音频文件数组
【发布时间】:2021-06-28 12:32:24
【问题描述】:

我目前不熟悉使用自己的数据集构建神经网络。我想训练一个卷积神经网络来进行音频分类,但我正在为数组重塑而苦苦挣扎。

我首先在我的手机上录制了音频,然后使用 Librosa 包加载它,以获得可用于我的神经网络的频谱图输出图像数组。

sample = 2
filename = df.File[sample]
y, sr = librosa.load('/content/drive/MyDrive/AI Data Set/SoundRecord-2021-03-30-15-46-36.wav',sr=44100)
ps = librosa.feature.melspectrogram(y=y, sr=sr) 
ps.shape. #Output (128,193)

然后我想将其重塑为 (128,128),所以我尝试了以下方法:

x = ps.reshape((128,128))

但它给了我一个错误信息:ValueError: cannot reshape array of size 24704 into shape (128,128)

此外,我还有许多这样的音频文件,我需要重新整形,然后创建一个组合数组,然后将该数组重新整形为 (128,128,1) 3D 数组。

请帮帮我!!!

【问题讨论】:

    标签: python numpy deep-learning neural-network conv-neural-network


    【解决方案1】:

    您的音频太长了。从 librosa 文档中,您从 melspectrogram 方法获得的输出如下:

    S - np.ndarray [shape=(n_mels, t)]
    

    t 是时间箱的数量,取决于输入 .wav 文件的长度。您可以截断输入(ps = ps[:,:128])或更好(在您的情况下)将 melspectrogram 拆分为两个重叠的

    melspecs = np.array([ps[:,:128], ps[:,-128:]])[..., np.newaxis]
    

    在这种情况下,melspec 具有 (2, 128, 128, 1) 的形状,因此可以作为大小为 2 的批次提供给您的网络。 为了推断最终分类,您可以按照自己喜欢的方式对输出进行投票。

    【讨论】:

    • 您的解决方案已经奏效。您还可以帮我做一件事吗,当我尝试对类执行 One-Hot 编码时:y_train = np.array(keras.utils.to_categorical(y_train, 4))y_test = np.array(keras.utils.to_categorical(y_test, 4)) 我收到一条错误消息:IndexError: index 4 is out of bounds for axis 1 with size 2
    • @AkellaNiranjan 抱歉,如果不知道初始 y_train 形状,我无法判断。
    猜你喜欢
    • 2019-11-03
    • 2015-11-11
    • 2022-11-18
    • 2022-01-18
    • 1970-01-01
    • 2012-10-05
    • 2019-08-14
    • 2019-05-22
    相关资源
    最近更新 更多