【问题标题】:How to use LSTM with sequence data of varying length with keras without embedding?如何在不嵌入的情况下使用带有 keras 的不同长度序列数据的 LSTM?
【发布时间】:2017-06-26 10:22:48
【问题描述】:

我有一个输入数据,其中每个示例都是一些不同数量的长度为 k 的向量。我总共有 n 个例子。所以输入的维度是 n * ? * ķ。问号代表不同的长度。

如果可能,我想将其输入到 Keras 中的 LSTM 层,不使用嵌入(这不是您的普通单词数据集)。

有人可以写一个简短的例子来说明如何做到这一点吗?

数据当前是一个双嵌套的python数组,例如

example1 = [[1,0,1], [1,1,1]]
example2 = [[1,1,1]]
my_data = []
my_data.append(example1)
my_data.append(example2)

【问题讨论】:

  • 我认为,如果您将时间步数设置为 None,则 LSTM 将能够接受任何长度的输入。所以基本上输入形状应该是 (batch_size, None, output_size)

标签: python keras lstm


【解决方案1】:

我认为你可以使用pad_sequences。这应该使您的所有输入都具有相同的长度。

【讨论】:

  • 是的,但是没有嵌入层我不能 mask_zeros,这意味着我的模型可能会因为所有这些零而学习到错误的东西
  • 由于 NN 只是一个点积,如果您的输入全为零,那么该层的输出将全为零。我在我的一个应用程序中使用了它,我和你一开始的感觉一样。然而,网络在训练和测试期间的输出为零。
【解决方案2】:

您可以使用填充 (pad_sequences) 和 Masking 层。

您还可以在手动训练循环中训练不同长度的批次:

for e in range(epochs):
    for batch_x, batch_y in list_of_batches: #providade you separated the batches by length
        model.train_on_batch(batch_x, batch_y)

这一切的关键是你的input_shape=(None, k)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多