【问题标题】:Keras 3D target predictionKeras 3D 目标预测
【发布时间】:2017-10-30 16:51:25
【问题描述】:

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

【问题讨论】:

    标签: python tensorflow keras lstm keras-layer


    【解决方案1】:

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

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

    您说得对,RepeatVector 导致了 3 次相同的结果。

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

    • 这些句子是否是“事件可能‘沿着’发现的序列”?
    • 这些句子是“静态决定事件的想法”吗?

    按照第二种方法,我想说你可以像这样使用第一个 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)))
    

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2020-05-11
      • 2020-03-07
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多