我正在尝试为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
答案 0 :(得分:1)
正如你在问题中所说:
每个数组最后都有零和数值(类索引)。
如果音频文件属于类索引= 1且帧数为8,则y将为[0,0,0,0,0,0,0,1]
第一步输入:
[update]处理变量输入大小的一种方法是使用dynamic_rnn
。 Read 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个输出。
如果需要更多解释,请告诉我,最好:)