【问题标题】:LSTM Model - [samples, timesteps, features]LSTM 模型 - [样本、时间步长、特征]
【发布时间】:2022-01-24 21:00:57
【问题描述】:

在训练 LSTM 模型时,我几乎在第 0 天试图了解 [样本、时间步长、特征] 模式。

假设我们有一个 TIME-SERIES T :

  • T = [1,2,3,4,5,6,7,8]
  • 滞后/回顾 = 6

将计算以下两组输入-输出:

  1. {[1,2,3,4,5,6] - 7}

  2. {[2,3,4,5,6,7] - 8}

我知道这个特定示例中的样本数等于 2,但是我注意到有些事情有效,但无法理解为什么/如何在假设 (1) 输入的输入上出现以下内容-输出组合:

一个。设置模型的input_size为(1,6),保持输入为[1,2,3,4,5,6]

b.设置模型的input_size为(2,3),将输入转化为如下格式[[1,2,3] [4,5,6]]

a和b有什么区别?

如果我错了,请纠正我,但在我看来,在 (a) 中,我一次使用 6 个长度的输入来训练 NN,而在 (b) 中,我通过在每个输入中输入两个三元组来训练 NN时间。此外,这对 NN 有何影响?

也许(问号)它与 LSTM 模型中的记忆概念有关。

顺便说一下,我正在使用 tensorflow.keras api。

【问题讨论】:

    标签: python tensorflow keras neural-network lstm


    【解决方案1】:

    考虑一个简单的模型架构:

    model = keras.Sequential()
    model.add(LSTM(units=16, input_shape=(n_timesteps, n_features), activation='relu'))
    model.add(Dense(1))
    model.compile(optimizer='adam', loss='mse')
    model.fit(X, y, batch_size=4, epochs=200, verbose=0)
    

    假设我们有以下具有 6 个特征的数据集:

    df = pd.DataFrame(data={'F1':np.arange(1, 21, 1),
                            'F2':np.arange(11, 31, 1),
                            'F3':np.arange(51, 71, 1),
                            'F4':np.arange(71, 91, 1),
                            'F5':np.arange(46, 66, 1),
                            'F6':np.arange(26, 46, 1)})
    

    Now consider Case A i.e. Set the model's input_size as (1,6):

    在这种情况下,您提供给模型的数据的形状为 (4, 1, 6)。即使用1 timestep6 featuresbatch size of 4

    让我们将数据重塑为3D input

    X = df.values
    X = X.reshape((X.shape[0], 1, X.shape[1]))
    

    由于我们的批次大小为4,因此您的批次将如下所示:

    [[[ 1 11 51 71 46 26]]
     [[ 2 12 52 72 47 27]]
     [[ 3 13 53 73 48 28]]
     [[ 4 14 54 74 49 29]]]
    

    Now consider Case B: Set the model's input_size as (2,3):

    您提供给模型的数据的形状为(8, 2, 3)。即使用2 timesteps3 featuresbatch size of 4

    让我们将数据重塑为3D input

    X = df.values
    X = X[:, :3] #As you are using 3 features in this case.
    X = X.reshape((10, 2, X.shape[1]))
    

    由于我们的批次大小为4,现在,您的批次将如下所示:

    [[[ 1 11 51]
      [ 2 12 52]]
    
     [[ 3 13 53]
      [ 4 14 54]]
    
     [[ 5 15 55]
      [ 6 16 56]]
    
     [[ 7 17 57]
      [ 8 18 58]]]
    

    Case C: Set the model's input_size as (2,6):

    您提供给模型的数据的形状为(8, 2, 6)。即使用2 timesteps6 featuresbatch size of 4

    让我们将数据重塑为3D input

    X = df.values
    X = X.reshape((10, 2, X.shape[1]))
    

    由于我们的批次大小为4,现在,您的批次将如下所示:

        [[[ 1 11 51 71 46 26]
          [ 2 12 52 72 47 27]]
    
         [[ 3 13 53 73 48 28]
          [ 4 14 54 74 49 29]]
    
         [[ 5 15 55 75 50 30]
          [ 6 16 56 76 51 31]]
    
         [[ 7 17 57 77 52 32]
          [ 8 18 58 78 53 33]]
    

    【讨论】:

    • 感谢您花时间绘制提供的示例,但它没有回答我最初的问题。当您说批量大小时,您是指 model.fit() 函数的 batch_size 参数吗?如果是这种情况,batch_size - timesteps 组合如何影响 NN 的结果?
    猜你喜欢
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2020-04-11
    • 2018-02-10
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多