我需要一个模型来输出形状(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)
?
答案 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)))