7

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

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

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

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

任何使用 LSTM 的更简单方法也将受到欢迎。

4

1 回答 1

9

现有的实现有很多,例如Tensorflow 实现以 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,你只能使用非常小的模型。

于 2016-01-07T23:28:39.840 回答