【问题标题】:How to write an LSTM in Keras without an Embedding layer?如何在没有嵌入层的 Keras 中编写 LSTM?
【发布时间】:2016-05-11 18:45:54
【问题描述】:

如何使用没有嵌入层的 LSTM 架构在 keras 中编写简单的序列复制任务?我已经有了词向量。

【问题讨论】:

  • 你试过去掉嵌入层吗?

标签: theano keras


【解决方案1】:

如果你说你有词向量,我猜你有一个字典来将一个词映射到它的向量表示(从 word2vec、GloVe 计算...)。

使用这本词典,您可以将序列中的所有单词替换为其对应的向量。您还需要使所有序列的长度相同,因为 LSTM 需要所有输入序列具有恒定长度。因此,您需要确定一个 max_length 值并修剪所有较长的序列并用零填充所有较短的序列(请参阅 Keras pad_sequences 函数)。

然后,您可以将矢量化序列直接传递到神经网络的 LSTM 层。由于 LSTM 层是网络的第一层,因此您需要定义输入形状,在您的情况下为 (max_length, embedding_dim, )。

这样您可以跳过嵌入层并使用您自己的预计算词向量。

【讨论】:

  • 也可以使用weights 参数将预训练的嵌入加载到嵌入层中,请参阅this post。这样以后就不需要摆弄转换,并且可以将句子作为整数列表直接传递给模型。
【解决方案2】:

在“用于序列分类的堆叠 LSTM”部分中搜索 Keras 后,我遇到了同样的问题,我发现以下代码可能有用: model = Sequential() model.add(LSTM(3NumberOfLSTM, return_sequences=True, input_shape=(YourSequenceLenght, YourWord2VecLenght)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 2019-03-12
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    相关资源
    最近更新 更多