是否可以使用 keras 制作更长的输出长度?
Is it possible to make longer output length with keras?
我想用 RNN 或 LSTM 预测一些与 space 天气相关的指标(kp、Dst 等)。可以构建多对一模型,尽管它显示出很差的准确性。但是,我的目标是通过最近 3 天的观察来预测未来 7 天。
问题是,在功能上是否可以构建输出长度(或时间步长?)比输入长的 RNN?
如有任何帮助,我们将不胜感激!请帮我。
可以。一种方法是使用所谓的 "sequence to sequence" 架构。它使您能够输入一系列数据点并预测一系列值。它的工作原理是使用固定大小的向量(通常是 LSTM 的最后隐藏状态)对输入进行编码,然后将其用作展开 n 个时间步的另一个 LSTM 的起始状态。
如果你想要预测的所有 7 个步骤都有标签,那么你可以使用如下模型,其中解码器将标签作为输入作为每个时间步的输入 0 <= t < n:
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)
如您所见,第一个 LSTM 使用 len num_encoder_token
对序列进行编码,我们只保留其最后状态 [encoder_states = [state_h, state_c]]
并将其用作第二个 LSTM (decoder_lstm
) 的初始化然后输入标签并尝试预测右移 1 的标签向量。
例如,如果您有第 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 阅读更多关于这种模型的信息。
我想用 RNN 或 LSTM 预测一些与 space 天气相关的指标(kp、Dst 等)。可以构建多对一模型,尽管它显示出很差的准确性。但是,我的目标是通过最近 3 天的观察来预测未来 7 天。
问题是,在功能上是否可以构建输出长度(或时间步长?)比输入长的 RNN?
如有任何帮助,我们将不胜感激!请帮我。
可以。一种方法是使用所谓的 "sequence to sequence" 架构。它使您能够输入一系列数据点并预测一系列值。它的工作原理是使用固定大小的向量(通常是 LSTM 的最后隐藏状态)对输入进行编码,然后将其用作展开 n 个时间步的另一个 LSTM 的起始状态。 如果你想要预测的所有 7 个步骤都有标签,那么你可以使用如下模型,其中解码器将标签作为输入作为每个时间步的输入 0 <= t < n:
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)
如您所见,第一个 LSTM 使用 len num_encoder_token
对序列进行编码,我们只保留其最后状态 [encoder_states = [state_h, state_c]]
并将其用作第二个 LSTM (decoder_lstm
) 的初始化然后输入标签并尝试预测右移 1 的标签向量。
例如,如果您有第 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 阅读更多关于这种模型的信息。