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