[英]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.