我目前正在尝试回归网络以提取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)
但为什么我得到这个结果?我没有改变有关框架选项的任何内容,为什么它们不同?
如果没有办法让它保持一致,怎么会训练一个能够做到这一点的神经网络,输入不一致?
答案 0 :(得分:1)
您的结果
(2048, 121)
(2048, 96)
给出帧长度和帧数。因此,帧大小实际上是2048个样本长度。两者之间的唯一区别是,第一个声音文件有121帧,第二个声音文件有96帧。
答案 1 :(得分:0)
音频文件是不同长度的序列。
有多种方法可以处理可变长度输入。您通常将具有固定尺寸的输入多次馈送到神经网络,每个音频帧一次。然后,网络使用像RNN,LSTM或seq2seq这样的架构从序列中学习(这种架构在变化,但在contrib / seq2seq中)。您还可以使用简单的DNN(前馈)架构。