当前位置:  开发笔记 > 编程语言 > 正文

为LSTM二进制分类构建语音数据集

如何解决《为LSTM二进制分类构建语音数据集》经验,为你挑选了1个好方法。

我正在尝试使用theano进行二进制LSTM分类.我已经完成了示例代码,但是我想构建自己的代码.

我正在使用一小段"Hello"和"Goodbye"录音.我通过为它们提取MFCC功能并将这些功能保存在文本文件中来预处理这些功能.我有20个语音文件(每个10个),我为每个单词生成一个文本文件,因此包含MFCC功能的20个文本文件.每个文件都是13x56矩阵.

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

我对此比较陌生.我也经历了一些关于它的文献,但没有找到对这个概念的真正理解.

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



1> Nikolay Shmy..:

有很多现有的实现,例如Tensorflow Implementation,以Kaldi为中心的所有脚本实现,最好先检查它们.

Theano太低级了,你可以尝试使用keras,如教程中所述.您可以"按原样"运行教程以了解事情的进展情况.

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

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,你只能使用非常小的模型.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有