【问题标题】:Confusion about Keras RNN Input shape requirement关于 Keras RNN 输入形状要求的困惑
【发布时间】:2017-11-13 16:06:15
【问题描述】:

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

正如 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))

谢谢!

【问题讨论】:

  • 我认为您的问题不清楚,如果您有源代码和实际错误消息,您应该将它们包含在您的问题中。仅仅说你有错误是不够的。
  • 按照 Matias 的建议,请向我们展示您拥有的引发此类错误的相关代码,以便我们更好地帮助您而不是询问。
  • @MatiasValdenegro 谢谢。帖子已更新
  • @Kris 你能添加你得到的错误吗?

标签: keras lstm


【解决方案1】:

确实,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)

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

【讨论】:

  • 整洁!非常感谢你。说到序列的长度,设置为每个序列的特征个数是否合理?在我的问题中,每个样本(序列)包含 64 个特征,这些特征形成了一个 10K 行和 64 列的矩阵!
  • 是一个时间序列吗?我会说它是(1, 10k, 64)。 “时间”是中心维度。 “功能”是独立的变量。我假设您每次都在测量这 64 个变量,对吧?
  • 是的,正如我所说,我的数据集与任何普通数据集非常相似。它有 10K 个样本,每个样本有 64 个特征。我想将每个样本视为一个序列,然后将它们提供给 RNN。就这样。顺便说一句,(1, 10k, 64) 不起作用。它以(10K, 64, 1) 的身份工作
猜你喜欢
  • 2020-06-10
  • 2022-01-15
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 2019-08-05
  • 2021-06-22
  • 2019-07-23
相关资源
最近更新 更多