2016-01-07 50 views
5

我正在尝试使用theano进行二进制LSTM分类。 我已经通过了示例代码,但是我想构建自己的代码。为LSTM二进制分类构建语音数据集

我有一小组“你好”&“再见”录音,我正在使用。我通过为它们提取MFCC功能并将这些功能保存在文本文件中来预处理这些功能。我有20个语音文件(每个10个),我为每个单词生成一个文本文件,因此包含MFCC功能的20个文本文件。每个文件是一个13x56矩阵。

我现在的问题是:如何使用这个文本文件来训练LSTM?

我对此比较陌生。我也浏览了一些关于它的文献,但没有发现真正理解这个概念。

任何使用LSTM的简单方法也是受欢迎的。

回答

6

有许多现有的实施例如Tensorflow Implementation,Kaldi-focused implementation with all the scripts,最好先检查它们。

Theano太低级别,您可以使用keras来代替,如tutorial中所述。您可以运行教程“按原样”来了解事情进展情况。

然后,你需要准备一个数据集。您需要将数据转换为数据帧序列,并按顺序为每个数据帧分配一个输出标签。

Keras支持两种类型的RNN--层返回序列和返回简单值的图层。您可以使用两种方法进行试验return_sequences=Truereturn_sequences=False

要使用序列进行训练,您可以为除了最后一个可以分配要识别的单词的标签的最后一个帧以外的所有帧分配虚拟标签。您需要将输入和输出标签放置到数组中。所以它会是:

X = [[word1frame1, word1frame2, ..., word1framen],[word2frame1, word2frame2,...word2framen]] 

Y = [[0,0,...,1], [0,0,....,2]] 

在X中,每个元素都是一个13个浮点数的向量。在Y中,每个元素只是一个数字 - 0表示中间帧,最后一帧表示单词ID。

要用标签进行训练,您需要将输入和输出标签放置到数组中,并且输出数组更简单。因此,该数据将是:

X = [[word1frame1, word1frame2, ..., word1framen],[word2frame1, word2frame2,...word2framen]] 

Y = [[0,0,1], [0,1,0]] 

需要注意的是输出矢量(np_utils.to_categorical)将其变成载体,而不仅仅是数量。

然后您创建网络体系结构。你可以有13个浮点数输入,一个矢量输出。在中间你可能有一个完全连接的层,接着是一个lstm层。不要使用太多的图层,从小的图层开始。

然后,您将此数据集输入到model.fit中,它将训练您的模型。您可以在训练结束后估算模型的质量。

由于您只有20个示例,因此您将遇到融合问题。你需要更多的示例,最好是数千个训练LSTM,你只能使用非常小的模型。

+0

嘿,谢谢你的指导。你知道任何有100个问候和再见记录的数据集吗? –

+1

你可以在这里下载一个隔离数字的数据库:http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/speech%20recognition%20course.html,每个数字大约有200个样本 –

+0

所以如果我是要将这种方法应用于数字(不是二进制),我们可以称之为语音识别? – udani