繁体   English   中英

关于如何为 lstm 塑造数据的建议

[英]Advice on how to shape data for lstm

我有一个由 933 个矩阵组成的时间序列,每个矩阵都是一个 8x10 矩阵。 这是我的 X(输入)。 所以 X 有形状 (933, 8, 10)。 Y(输出)是 933 个向量的时间序列,每个向量是一个 5 维向量。 所以 Y 有形状 (933, 1, 5)。

我还可以重塑数据(我应该吗?),例如 X 是 (933, 80) 和 Y 是 (933, 5) 因为最终它只是一组 80 个数字的 933 个样本用于输入(想象 80 个像素在矩阵中)和一组 5 个数字的 933 个样本,用于 output。

我正在写一个 CNN-LSTM。 我仍然不知道训练/测试的大小,现在假设我想使用所有 933 个样本进行训练。 我的 model 是:

model = Sequential()
# define CNN model
model.add(TimeDistributed(Conv2D(1, (2,2), activation='relu', padding='same', input_shape=(None,8,10))))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Flatten()))
# define LSTM model
model.add(LSTM(933, activation='relu', input_shape=(8,10)))       
model.add(Dense(5))
model.compile(optimizer='adam', loss='mse')
model.fit(X, Y)

我收到以下错误:ValueError: input tensor must have rank 4。

我的问题是为什么我会收到这个错误,我该如何解决这个问题?

对于 LSTM,输入必须是3D ,即(samples, time steps, features)
在您的情况下,您需要将数据重塑为(933,8,10)

在 LSTM 层中,参数input_shape采用两个值的元组,定义time steps数和features数。 在您的情况下,它将是(8,10)

您可以提及任何 LSTM 层的单元数,通常是 32,64 或 128 范围。 单元太多不利于 model 的学习。

下面是您的数据的示例 LSTM 层。

data.shape= (933,8,10) 

model = Sequential()
model.add(LSTM(32, input_shape=(8, 10)))
model.add(Dense(5))
model.compile(optimizer='adam', loss='mse')
model.fit(X, Y)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM