python - 如何将 MLP 的数据调整为 LSTM(预期 ndim=3,发现 ndim=2 错误)

标签 python keras deep-learning lstm data-processing

我的数据显示,多层感知器架构的工作如下所示

X_train_feature.shape
(52594, 16)

X_train_feature[0]
array([1.18867208e-03, 1.00000000e+00, 8.90000000e+01, 8.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00])

y_train
(52594, 2)

y_train[0].toarray()
array([[0., 1.]])

按第一维度:样本数 第二个:对于 X_train 来说是特征的数量,对于 y_train 来说是 one-hot 编码器。

我想在 LSTM/Bi-LSTM 上使用相同的数据,因此我从互联网复制代码并将输入值更改为与 MLP 相同

def define_model():
    model = Sequential()
    model.add(LSTM(20, input_shape=X_train_feature[0].shape, return_sequences=True))
    model.add(TimeDistributed(Dense(1, activation='sigmoid')))
    model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])  # compile
    print('Total params: ', model.count_params())
    return model

但是当我尝试创建模型时,将附加有关输入形状的错误

model = define_model()
ValueError: Input 0 is incompatible with layer lstm_30: expected ndim=3, found ndim=2

我应该如何调整我的数据以应用于 LSTM 或者我需要更改架构配置?非常感谢。

最佳答案

LSTM(与感知器不同)不是前馈网络。它需要历史来预测下一点。因此,LSTM 的正确输入张量应为 (timesteps, num_features) 形状,这意味着每个样本都是一系列 timesteps 观察值,以便细胞状态在序列的第一次观察并遍历整个序列。

因此,输入张量的形状应为(num_sequences, seq_length, num_features),其中:

  • num_sequences:样本数量,即需要多少个序列来训练模型?

  • seq_length:这些序列的长度。对于可变长度序列,您可以提供None

  • num_features:给定序列中有多少个特征具有单个观察结果?

关于python - 如何将 MLP 的数据调整为 LSTM(预期 ndim=3,发现 ndim=2 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60053537/

相关文章:

python - 在 Keras 的 tokenizer 类中使用 num_words

tensorflow - 属性错误 : module 'tensorflow.estimator' has no attribute 'SessionRunHook'

python - CNN 过度拟合(附输出和代码)

python - Pyramid 静态 View (js、img、css): AttributeError

python - 与命令行程序交互

python - 我的模型的训练/验证准确性表现得很奇怪

python - 调整 TensorFlow 代码丢弃层以允许导入到 openCV

python - LSTM 和 CNN : ValueError: Error when checking target: expected time_distributed_1 to have 3 dimensions, 但得到形状为 (400, 256) 的数组

python - 为什么 python 在导入 A.B.C 时将 'A' 放入全局命名空间

python - Pandas:合并后 DataFrame 太长