Keras 3D目标预测

时间:2017-10-30 16:51:26

标签: python tensorflow keras lstm keras-layer

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

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)

1 个答案:

答案 0 :(得分:2)

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

拥有处理长度为1的序列的LSTM图层并不是一个优势。

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

现在,根据"您的模型应该如何检测这些事件",不同的方法可能会更好。

  • 这些句子是"可以找到事件的顺序'沿着'"?
  • 这些句子"是一个静态决定事件的想法"?

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

LSTM(hidden, return_sequence=False)    

隐藏必须为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)))