代码之家  ›  专栏  ›  技术社区  ›  Roma Jain

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

  •  -2
  • Roma Jain  · 技术社区  · 6 年前

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

    每个数组的末尾都有零和一个数值(类索引)。

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

    我想知道当模特的时候。对每个可变长度的音频数据调用fit,则最后一个密集层()的输出形状将等于音频的帧数

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

    我不想填充序列,而是在LSTM输入层形状中给出“无”。

    但是,在转换为 明确的 ,我得到错误: 正在使用序列设置数组元素。

    这里,11是类数

    y_train=to_categorical(y_train,11)
    y_test=to_categorical(y_test,11)
    

    Tensorflow版本:1.3.0

    Keras版本:2.0.9

    1 回复  |  直到 6 年前
        1
  •  1
  •   Community Dan Abramov    4 年前

    正如你在问题中所说:

    每个数组的末尾都有零和一个数值(类索引)。

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

    第一步输入:

    [更新]处理可变输入大小的一种方法是 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个输出。

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