Keras 3D目标预测

Keras 3D target prediction

我需要一个模型来输出形状为 (3,2) 的回归目标,其中 3 是事件数,每个事件都有 X and Y 坐标。输入数据可以跨越 1 个或多个时间步长。这是我的模型的一个例子,当输入有一个时间步长时。

model = Sequential()
model.add(Embedding(vocab_size + 1, embedding, input_length=1))
model.add(LSTM(hidden, recurrent_dropout=0.1, return_sequences=True))
model.add(Flatten())
model.add(RepeatVector(3))
model.add(LSTM(2, return_sequences=True))

模型编译并运行,但它在 3 个事件中为 X, Y 生成相同的值。我认为这是因为 RepeatVector 层。我还能如何确保我的输出是 (None, 3, 2)?

首先提示:如果一个 "sentence" 应该生成 3 个事件,我认为你不应该使用 input_length=1,而应该使用 input_length=lengthOfTheSentences

LSTM 层处理长度为 1 的序列并不是优势。

您说 RepeatVector 导致了 3 次相同的结果是正确的。

现在,根据 "how is your model supposed to detect those events",不同的方法可能会更好。

  • 这些句子是"a sequence where the events may be found 'along'"吗?
  • 这些句子是"an idea that determines the events statically"吗?

按照第二种方法,我会说你可以像这样使用第一个 LSTM:

LSTM(hidden, return_sequence=False)    

其中 hidden 必须为 6。(您可以使用更多的隐藏层 return_sequences=True,但重要的是最后一个具有与 6 兼容的输出量)。

然后您以事件的形式重塑结果:

Reshape((3,2))

示例:

model = Sequential()
model.add(Embedding(vocab_size + 1, embedding, input_length=sentenceLength))
model.add(LSTM(hidden1, recurrent_dropout=0.1, return_sequences=True))
model.add(LSTM(hidden2, recurrent_dropout=0.1, return_sequences=True))
model.add(LSTM(hidden3, recurrent_dropout=0.1, return_sequences=True))
model.add(LSTM(6, recurrent_dropout=0.1, return_sequences=False))
model.add(Reshape((3,2)))