关于 Keras RNN 输入形状要求的困惑

Kri*_*fer 9 lstm keras

我已经阅读了很多关于这一点的帖子。它们彼此不一致,每个答案似乎都有不同的解释,所以我想根据我对所有答案的分析来提问。

正如 Keras RNN文档所述,输入形状始终采用这种形式(batch_size, timesteps, input_dim)。我对此有点困惑,但我想,虽然不确定,但input_dim始终为 1 而timesteps取决于您的问题(也可能是数据维度)。这大致正确吗?

这个问题的原因是我在尝试将 的值更改input_dim为我的数据集维度时总是出错(因为 input_dim 听起来像那样!!),所以我做了一个假设,input_dim表示 LSTM 的输入向量的形状一个时间。我又错了吗?

C = C.reshape((C.shape[0], C.shape[1], 1))
tr_C, ts_C, tr_r, ts_r = train_test_split(C, r, train_size=.8)
batch_size = 1000

print('Build model...')
model = Sequential()

model.add(LSTM(8, batch_input_shape=(batch_size, C.shape[1], 1), stateful=True, activation='relu'))
model.add(Dense(1, activation='relu'))

print('Training...')
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(tr_C, tr_r,
          batch_size=batch_size, epochs=1,
          shuffle=True, validation_data=(ts_C, ts_r))
Run Code Online (Sandbox Code Playgroud)

谢谢!

Dan*_*ler 7

实际上,input_dim是一次输入向量的形状。换句话说,input_dim是输入的编号features

不过,它不一定是 1。如果您使用多个 var,它可以是任意数字。

假设您有 10 个序列,每个序列有 200 个时间步长,而您只测量一个温度。然后你有一个功能:

  • input_shape = (200,1) -- 注意这里忽略了批量大小(序列数)
  • batch_input_shape = (10,200,1)-- 仅在特定情况下,例如stateful = True,您将需要批量输入形状。

现在假设您不仅要测量温度,还要测量压力和体积。现在您已经获得了三个输入功能:

  • input_shape = (200,3)
  • batch_input_shape = (10,200,3)

换句话说,第一维是不同序列的数量。第二个是序列的长度(沿时间测量多少次)。最后一个是每次有多少个变量。