我想用RNN或LSTM预测一些与空间天气有关的指数(kp,Dst等)。尽管精度很差,但可以构建多对一模型。但是,我的目标是通过最近3天的观察来预测将来的7天。
问题是,在功能上可以构建输出长度(或时间步长)比输入长的RNN吗?
任何帮助将不胜感激!请帮我。
答案 0 :(得分:0)
可以。一种实现方法是使用所谓的“序列到序列”架构。它使您可以输入数据点序列并预测值序列。它通过使用固定大小的矢量(通常是LSTM的最后一个隐藏状态)对输入进行编码,然后将其用作展开了n个时间步长的另一个LSTM的开始状态来工作。
如果您具有要预测的所有7个步骤的标签,则可以使用以下模型:解码器将每个步骤0 <= t 如您所见,第一个LSTM用len 例如,如果您有第1天,第2天,第3天作为输入序列,并且您要预测第4天,第5天,...,第10天,那么您会将第1天的编码器馈入第3天,并使用第4天...第9天作为输入用于解码器。这样,解码器标签将为day5 ... day10。 您可以在https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html上了解有关这种模型的更多信息。 encoder_inputs = Input(shape=(None, num_encoder_tokens))
encoder = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)
encoder_states = [state_h, state_c]
decoder_inputs = Input(shape=(None, num_decoder_tokens))
decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs,
initial_state=encoder_states)
decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
num_encoder_token
编码序列,我们仅保留其最后状态[encoder_states = [state_h, state_c]]
并将其用作第二个LSTM(decoder_lstm
)的初始化。然后输入标签,并尝试预测标签向量右移1。