我正在尝试使用theano进行二进制LSTM分类。 我已经完成了示例代码,但我想构建自己的代码。
我有一小部分“你好”&我正在使用的“再见”录音。我通过为它们提取MFCC功能并将这些功能保存在文本文件中来预处理这些功能。我有20个语音文件(每个10个),我为每个单词生成一个文本文件,因此包含MFCC功能的20个文本文件。每个文件都是13x56矩阵。
我现在的问题是:如何使用此文本文件来训练LSTM?
我对此比较陌生。我也经历了一些关于它的文献,但没有找到对这个概念的真正理解。
使用LSTM的任何更简单的方法也是受欢迎的。
答案 0 :(得分:9)
有许多现有的实施例如Tensorflow Implementation,Kaldi-focused implementation with all the scripts,最好先检查它们。
Theano太低级别,您可以尝试使用keras,如tutorial中所述。您可以按原样运行教程""了解事情的进展情况。
然后,您需要准备一个数据集。您需要将数据转换为数据帧序列,并按顺序为每个数据帧分配输出标签。
Keras支持两种类型的RNN - 返回序列的图层和返回简单值的图层。您可以在代码中使用return_sequences=True
或return_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,你只能使用非常小的模型。