python - 关于如何为 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 个样本用于输出。
我正在写一个 CNN-LSTM。我仍然不知道训练/测试的大小,现在假设我想使用所有 933 个样本进行训练。我的模型是:
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 范围。单元过多不会帮助模型学习。
下面是您的数据的示例 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)
推荐阅读
- java - 在 k8 pod 中运行 jcmd,权限被拒绝或无法打开套接字文件
- azure - 如何在第一个管道上的阶段完成时运行第二个 Azure 管道
- unix - 从终端的父文件夹运行程序
- async-await - 来自 S3 FastAPI 的响应文件流
- javascript - 将 Summernote 与 Webpack 一起使用
- amazon-web-services - 使用 NLB 和 IAM 身份验证公开 AWS MSK - 主机名验证失败
- json - 如何从 Json 文件创建对象列表
- javascript - 测试什么:JavaScript 或 TypeScript?
- django - 在 django 中订购 pip 包版本
- c# - 将特定日期的文件复制到另一个目录