1

我目前正在尝试回归网络以提取 MFCC 特征。网络的输入是采样和成帧的音频文件,我似乎有一些问题,或者以我得到一致输出的方式进行 - 意味着一致的帧大小,因为它不能作为输入对于神经网络。

我目前正在对每个音频文件进行采样和构图:

def load_sound_files(file_paths , data_input):
    raw_sounds = []
    data_output = []
    for fp in file_paths:
        y,sr = librosa.load(fp)
        X = librosa.util.frame(y)
        raw_sounds.append(X)
    return raw_sounds

这意味着每个音频都附加到一个列表中,并且每个列表中都有一个带有帧音频文件的数组。

[array([[frame],[frame],...,[frame]],dtype=float32), ...]

我试着打印这个

print raw_sounds[0].shape
print raw_sounds[1].shape

并得到了这个结果

(2048, 121)
(2048, 96)

但为什么我会得到这个结果?我没有更改任何有关框架选项的内容,那么为什么它们会有所不同?

如果没有办法保持一致,那么在输入不一致的情况下,任何人将如何训练能够做到这一点的神经网络?

4

2 回答 2

1

你的结果

(2048, 121)
(2048, 96)

给出帧长度和帧数. 所以帧大小实际上是始终如一的 2048 个样本。两者之间的唯一区别是第一个声音文件有 121 帧,第二个声音文件有 96 帧。

于 2016-11-13T18:04:50.367 回答
0

音频文件是具有不同长度的序列。

有多种方法可以处理可变长度输入。您通常将固定维度的输入多次馈送到神经网络,每个音频帧一次。然后,网络使用RNN、LSTM 或 seq2seq 等架构从序列中学习(这是不断变化的,但在 contrib/seq2seq 中)。您还可以使用简单的 DNN(前馈)架构。

于 2016-11-07T20:20:16.043 回答