在 Keras 中为 LSTM 重塑批次

Posted

技术标签:

【中文标题】在 Keras 中为 LSTM 重塑批次【英文标题】:Reshaping a batch for LSTM in Keras 【发布时间】:2019-05-17 16:45:14 【问题描述】:

通过使用 LSTM 自动编码器,我在根据 LSTM 需求调整数据集时遇到了一些问题。 由于我正在批量训练,因此我生成了一个时间序列窗口循环 - 代码如下所示:

X_batch = np.array(file.loc[window * WINDOWS_SIZE:(window + 1) * WINDOWS_SIZE - 1], dtype="f")
print(X_batch.shape)
X_batch = np.reshape(1, WINDOWS_SIZE, cluster_feature_size)
print(X_batch.shape)
history = model.fit(X_batch, X_batch, epochs=1, verbose=False)

我的批次由 48 个数据点(WINDOWS_SIZE)和 45 个指标(cluster_feature_size 变量)组成。

我读到我需要以以下格式重塑我的数据(samples, timesteps, features),但我在某处失败并且缺少一些信息。

我的假设是 1 个样本是 1 个批次,在一个批次中我有 48 个数据点,因此我设置了 48 个时间步长。

我目前构建的模型架构草稿如下:

model = Sequential()
model.add(LSTM(100, activation='relu', input_shape=(WINDOWS_SIZE, cluster_feature_size)))
model.add(RepeatVector(WINDOWS_SIZE))
model.add(Dense(1))
model.add(LSTM(100, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(1)))

我遵循了一个在线教程,我仍在努力。

我得到的错误是这个,而我正在重塑:

(48, 45)
---> 17 X_batch = np.reshape(1, WINDOWS_SIZE, cluster_feature_size)
ValueError: cannot reshape array of size 1 into shape (48,)

【问题讨论】:

运行print(X_batch.shape)X_batch = np.array(file.loc[window * WINDOWS_SIZE:(window + 1) * WINDOWS_SIZE - 1], dtype="f")的形状是什么? 你可以试试这个:(X_batch.shape[0],WINDOWS_SIZE,X_batch.shape[1])? 1 是奇数,所以请你也给我们第一次打印好吗 感谢您的回答:我按照您的要求添加了形状的打印并修改了重塑代码,但仍然出现相同的错误:---> 17 X_batch = np.reshape(X_batch.shape[0],WINDOWS_SIZE,X_batch.shape[1])ValueError: cannot reshape array of size 1 into shape (48,) 【参考方案1】:

这里不需要重塑:

import numpy as np
X = np.random.rand(48, 45)
X = np.array([X])
print(X.shape)

给我:

>>> (1, 48, 45)

由于我不了解更多上下文,因此无法为您提供更多帮助,但这应该可以解决重塑问题。

【讨论】:

好的,谢谢,现在我可能遇到了架构错误。架构是否不符合自动编码器的目的?我刚刚在教程中找到了这些层,但我不确定它们的有效性。我只想通过利用 LSTM 单元的 AutoEncoder 创建重建。 ValueError: Error when checking target: expected time_distributed_4 to have shape (48, 1) but got array with shape (48, 45) 在运行 fit 方法时编辑:我通过在 model.add(TimeDistributed(Dense(feature_cluster_size))) 中修改`model.add(TimeDistributed(Dense(1)))` 解决了这个错误 好吧,最后的密集 1 杀死了一切。它为所有输入返回一个值然后您就没有机会找到样本。另外两层是有道理的,但我真的不能说这样做有什么意义。请务必仔细阅读教程,看看您是否没有错过任何部分。这可以是编码器,但应该使用我在这里看不到的解码器进行训练。

以上是关于在 Keras 中为 LSTM 重塑批次的主要内容,如果未能解决你的问题,请参考以下文章

如何重塑文本数据以适合 keras 中的 LSTM 模型

如何为 LSTM keras 重塑 X_train 和 y_train

如何在 Keras 中为 LSTM 构建三维滞后时间步长?

如何在 keras 中拟合两个连接 LSTM 的模型?

如何使用Keras LSTM与word嵌入来预测单词id

用于 LSTM 的 Keras 多元形状