gpt4 book ai didi

machine-learning - 使用不同长度的时间序列在 Keras 中训练 LSTM

转载 作者:行者123 更新时间:2023-11-30 09:28:37 25 4
gpt4 key购买 nike

我是 Keras 新手,想知道如何使用不同长度的(中断)时间序列来训练 LTSM。例如,考虑从第 1 天到第 10 天的连续序列以及从第 15 天到第 20 天的另一个连续序列。简单地将它们连接到单个序列可能会产生错误的结果。我基本上看到两个选项可以使它们成形(batch_size、timesteps、output_features):

  1. 将较短的系列扩展一些默认值 (0),即对于上面的示例,我们将拥有以下批处理:

    d1, ..., d10
    d15, ..., d20, 0, 0, 0, 0, 0
  2. 计算长度的 GCD,将序列分成几部分,并使用有状态的 LSTM,即:

    d1, ..., d5
    d6, ..., d10
    reset_state
    d15, ..., d20

还有其他/更好的解决方案吗?使用完整序列训练无状态 LSTM 是否等同于使用片段训练有状态 LSTM?

最佳答案

您是否尝试过向 LSTM 层提供不同长度的输入?使用 LSTM 时,输入时间序列可以具有不同的长度(甚至批处理大小可以不同,但​​显然特征的维度应该相同)。这是 Keras 中的一个示例:

from keras import models, layers

n_feats = 32
latent_dim = 64

lstm_input = layers.Input(shape=(None, n_feats))
lstm_output = layers.LSTM(latent_dim)(lstm_input)

model = models.Model(lstm_input, lstm_output)
model.summary()

输出:

Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer) (None, None, 32) 0
_________________________________________________________________
lstm_2 (LSTM) (None, 64) 24832
=================================================================
Total params: 24,832
Trainable params: 24,832
Non-trainable params: 0

正如您所看到的,输入层的第一和第二轴是None。这意味着它们不是预先指定的并且可以是任何值。您可以将 LSTM 视为一个循环。无论输入长度如何,只要还有相同长度的剩余数据向量(即 n_feats),LSTM 层就会处理它们。因此,正如您在上面所看到的,LSTM 层中使用的参数数量并不取决于批量大小或时间序列长度(它只取决于输入特征向量的长度和 LSTM 的潜在维度)。

import numpy as np

# feed LSTM with: batch_size=10, timestamps=5
model.predict(np.random.rand(10, 5, n_feats)) # This works

# feed LSTM with: batch_size=5, timestamps=100
model.predict(np.random.rand(5, 100, n_feats)) # This also works

但是,根据您正在处理的具体问题,这可能不起作用;虽然我现在脑子里没有任何具体的例子来说明这种行为可能不合适,但你应该确保所有时间序列具有相同的长度。

关于machine-learning - 使用不同长度的时间序列在 Keras 中训练 LSTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50748986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com