为包含可变长度序列的数组的输出标签创建分类numpy数组

时间:2018-04-25 09:46:32

标签: python numpy scikit-learn keras lstm

我正在尝试为LSTM模型创建可变序列长度数据。所以,我创建了一个可变长度的numpy数组列表。 例如,一个数组的长度=> (11,20)和其他长度=> (9,20)。其中20是特征数,11/9表示序列长度

每个数组最后都有零和数值(类索引)。

如果音频文件属于类索引= 1,则帧数为8 y将是[0,0,0,0,0,0,0,1]

我想知道,当在每个可变长度的音频数据上调用model.fit时,最后的Dense layer()将具有与音频具有的帧数相等的输出形状

那么,如何创建Dense层(8或9或11)的可变输出形状

我不想填充序列,而是提供“无”序列。在LSTM输入图层形状。

但是,在转换为分类时,我收到错误:按顺序设置数组元素。

这里,11是班级数

webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setSupportMultipleWindows(true);

Tensorflow版本:1.3.0

Keras版本:2.0.9

1 个答案:

答案 0 :(得分:1)

正如你在问题中所说:

  

每个数组最后都有零和数值(类索引)。

     

如果音频文件属于类索引= 1且帧数为8,则y将为[0,0,0,0,0,0,0,1]

第一步输入:

[update]处理变量输入大小的一种方法是使用dynamic_rnnRead more here

我们处理这个问题的另一种方法,就像我们在文本分类中所做的那样是使用填充。

所以说我们创建大小为10的嵌入,所以每个单词都有10个大小的向量输入。

输入5个字的句子,实际上是5 * 10的输入。

现在,由于TF / Keras接受固定大小的输入。我们填充输入。

所以我们采用固定输入长度的单词数(比如说这种情况下为20)。

删除20后出现的单词。

如果句子有5个单词,那么之后会有15个填充。

现在输入将通过嵌入层传递,最终输入将为(None, 20, 10) (Batch_size, Sequence_length, embedding_dimension)

您的问题也可以转换为类似的输入。

  

例如,一个数组的长度=> (11,20)和其他长度=> (9,20)。其中20是特征数,11/9表示序列长度

这里假设序列长度为15左右,并假设嵌入维度为20。

您必须填写9/11号的输入,以便在15处保持一致(您可以尝试使用此数字)。

20是您的嵌入维度,功能。

所以最终输入形状为(None, 15, 20)

下一步输出:

现在,您可以直接对每个输入的输出类进行热编码。 对于9,20的输入,您有1个热编码输出向量。

之前您曾想过,对于一个长度为9且功能为20的输入 输出应该是9的长度,前8个输出应该是0和9应该是类。

这不再需要,因为1个大小(9,20)的输入将提供1个输出。

如果需要更多解释,请告诉我,最好:)