【问题标题】:Saving LSTM hidden states while training and predicting for multi-class time series classification在训练和预测多类时间序列分类时保存 LSTM 隐藏状态
【发布时间】:2019-12-28 01:01:55
【问题描述】:

我正在尝试使用 LSTM 对时间序列数据进行多类分类。

训练集的维度为 (390, 179),即 390 个对象,每个对象有 179 个时间步长。

有 37 个可能的类。

我想使用只有 LSTM 和激活层的 Keras 模型对输入数据进行分类。

我还需要所有通过模型的训练数据和测试数据的隐藏状态,在 LSTM 的每一步(不仅仅是最终状态)。

我知道return_sequences=True 是必需的,但我无法让尺寸匹配。

以下是我尝试过的一些代码,但我已经尝试过大量其他来自 stackexchange 和 git 问题的调用组合。在所有这些中,我都会遇到一些尺寸不匹配或其他问题。

我不知道如何从模型中提取隐藏状态表示。

我们有X_train.shape = (390, 1, 179)Y_train.shape = (390, 37)(一次性二元向量)/。

n_units = 8
n_sequence = 179
n_class = 37

x = Input(shape=(1, n_sequence))
y = LSTM(n_units, return_sequences=True)(x)
z = Dense(n_class, activation='softmax')(y)

model = Model(inputs=[x], outputs=[y])
model.compile(loss='categorical_crossentropy', optimizer='adam')

model.fit(X_train, Y_train, epochs=100, batch_size=128)
Y_test_predict = model.predict(X_test, batch_size=128)

这就是上面给我的:

ValueError: A target array with shape (390, 37) was passed for an output of shape (None, 1, 37) while using as loss 'categorical_crossentropy'. This loss expects targets to have the same shape as the output.

【问题讨论】:

    标签: python keras time-series lstm multiclass-classification


    【解决方案1】:

    您输入的形状应该是这样的:(样本、时间步长、特征) 其中样本是您拥有多少个序列,时间步长是您的序列有多长,以及您想在一个时间步内输入多少输入。 如果您设置 return_sequences=True,您的标签数组应该具有(样本、时间步长、输出特征)的形状。

    【讨论】:

    • 你能解释一下你所说的特征是什么意思吗?
    • 你也可以用我上面提供的数字显示吗?
    【解决方案2】:

    似乎没有任何方法可以构建一个可工作的可训练模型,同时还使用 return_sequences=True 返回隐藏状态。

    我发现的解决方法是构建一个预测模型并对其进行训练,然后保存权重。然后我建立了一个以我的 LSTM 层结束的新模型,并为它提供了经过训练的权重。因此,使用return_sequences=True,我能够预测新数据并获得每个隐藏状态的数据表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2020-01-30
      • 2020-09-14
      • 2019-06-03
      • 1970-01-01
      • 2020-01-30
      • 2019-05-18
      相关资源
      最近更新 更多