【问题标题】:How do I structure 3D Input properly for Keras LSTM如何为 Keras LSTM 正确构建 3D 输入
【发布时间】:2020-02-18 23:21:00
【问题描述】:

我有一个数据集,其中包含许多及时的快照观察和一个 1 或 0 作为每个观察的标签。假设每个观察包含 3 个特征。我想训练一个 LSTM,它将接受一系列 n 观察并尝试将第 n 个观察分类为 1 或 0。

如果我们有一个如下所示的数据集:

# X = [[0, 1, 1], [1, 0, 0], [1, 1, 1], [1, 1, 0]]
# y = [1, 0, 1, 0]
# so X[0] = y[0], X[1] = y[1]
# . and I would like to input X[0] + X[1] to classify X[1] as y[1]
# . How would I need to structure this below?


X = [[0, 1, 1], [1, 0, 0], [1, 1, 1], [1, 1, 0]]
y = [1, 0, 1, 0]

def create_model():
  model = Sequential()
  # input_shape[0] is equal to 2 timesteps?
  # input_shape[1] is equal to the 3 features per row?
  model.add(LSTM(20, input_shape=(2, 3)))
  model.add(Dense(1, activation='sigmoid'))
  model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
  model.summary()

m = create_model()
m.fit(X, y)

所以我希望 X[0]X[1] 成为一次训练迭代的输入,并应归类为 y[1]

我的问题是这样的。如何构建模型以正确获取此输入?我对input_shapefeaturesinput_lengthbatches 等感到非常困惑……

【问题讨论】:

    标签: pandas numpy keras deep-learning lstm


    【解决方案1】:

    您的输入形状正确。 我会将输入数据重塑为 (batch_size, timesteps, features)

    m = create_model()
    X.reshape((batch_size, 2, 3))
    m.fit(X, y)
    

    常见的批量大小为 4、8、16、32,但对于小型数据集,批量大小的影响不太重要。 当你想预测时使用 batch_size = 1

    【讨论】:

      【解决方案2】:

      下面的代码 sn-p 可能有助于澄清:

      from keras.models import Sequential
      from keras.layers import LSTM, Dense
      import numpy as np
      
      # Number of samples = 4, sequence length = 3, features = 2
      
      X = np.array( [ [ [0, 1], [1, 0,], [1, 1] ], 
                      [ [1, 1], [1, 1,], [1, 0] ], 
                      [ [0, 1], [1, 0,], [0, 0] ], 
                      [ [1, 1], [1, 1,], [1, 1] ]] )
      
      y = np.array([[1], [0], [1], [0]])
      print(X)
      print(X.shape)
      print(y.shape)
      
      model = Sequential()
      model.add(LSTM(20, input_shape=(3, 2)))
      model.add(Dense(1, activation='sigmoid'))
      model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
      model.summary()
      
      model.fit(X, y)
      

      此外,在 Keras 文档页面上:https://keras.io/getting-started/sequential-model-guide/ 查看底部附近的“用于序列分类的堆叠 LSTM”的示例。它可能会有所帮助。

      一般使用 Keras,批次维度/样本维度未在层中指定 - 它是从输入数据自动推断出来的。

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2020-09-04
        • 2019-01-29
        • 1970-01-01
        • 2019-10-08
        • 2023-03-29
        • 2020-11-27
        • 2018-02-20
        • 2020-08-15
        • 2019-09-17
        相关资源
        最近更新 更多