Python 如何在没有嵌入的情况下使用具有keras的变长序列数据的LSTM?

Python 如何在没有嵌入的情况下使用具有keras的变长序列数据的LSTM?,python,keras,lstm,Python,Keras,Lstm,我有一个输入数据,其中每个示例都是一些长度为k的可变数量的向量。我总共有n个例子。所以输入的维数是n*?*K问号象征着不同的长度 如果可能的话,我想将它输入到Keras中的LSTM层,而不使用嵌入(它不是普通的Word数据集) 有人可以写一个简短的例子来说明如何做到这一点吗 数据当前是一个双嵌套python数组,例如 example1 = [[1,0,1], [1,1,1]] example2 = [[1,1,1]] my_data = [] my_data.append(example1) m

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

如果可能的话,我想将它输入到Keras中的LSTM层,而不使用嵌入(它不是普通的Word数据集)

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

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

example1 = [[1,0,1], [1,1,1]]
example2 = [[1,1,1]]
my_data = []
my_data.append(example1)
my_data.append(example2)
我想你可以用。这将使您的所有输入长度相同。

我认为您可以使用。这将使所有输入的长度相同。

您可以使用填充()和
掩蔽层

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

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)
所有这些的关键点是,您的
输入\u shape=(无,k)

您可以使用填充()和
掩蔽层

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

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\u shape=(None,k)

是的,但是我不能在没有嵌入层的情况下屏蔽零,这意味着我的模型可能会学习到错误的东西,因为所有这些零。NN只是一个点积。如果你的输入都是零,那么该层的输出将都是零。我在我的一个应用程序中使用了这个,我有一种和你一开始一样的感觉。然而,网络在训练和测试过程中都给出了零输出。是的,但是我不能在没有嵌入层的情况下屏蔽零,这意味着我的模型可能会学习到错误的东西,因为所有这些零。因为NN只是一个点积如果你的输入都是零,那一层的输出将是零。我在我的一个应用程序中使用了这个,我有一种和你一开始一样的感觉。然而,在训练和测试期间,网络的输出为零。我认为,如果你没有设置时间步数,那么LSTM将能够接收任何长度的输入。所以基本上输入形状应该是(批处理大小,无,输出大小),我认为如果你为时间步数设置无,那么LSTM将能够接受任何长度的输入。因此,基本上输入形状应该是(批处理大小、无、输出大小)