【发布时间】:2019-07-03 00:08:53
【问题描述】:
我正在尝试使用一组 1D CNN 和 LSTM 层对基于 Keras 的网络进行建模。网络上的大多数可用示例都使用 (1, 30, 50) 等形状的数据(1 个样本包含 30 个时间步长,每个时间步长 50 个特征)。
但是,我的数据集中的每个时间步长都由许多一维数组组成。一个 10 个时间步的样本将是 (1, 10, 100, 384)(1 个批次 - 一个样本,10 个时间步,每个包含 100 个具有 384 个特征的数组)。那么,我应该如何定义具有这种形状的模型呢?
我真的可以将每个时间步长数据展平(100*384),但这似乎很不够,因为可能会使所有 CNN 处理无效...另外,每个时间步长数据实际上是一维的:不是空间数据。
我已经定义了一个简单的模型,如下所示,但我认为它错误地使用了输入形状的batch_size。我认为它试图从“482 个样本”中学习,而不是从具有“482 个时间步长”的单个样本中学习......
data_input_shape = (482, 100, 384)
model = Sequential()
model.add(Conv1D(300, 1, activation="relu", input_shape=(100,384)))
model.add(MaxPooling1D(4))
model.add(Conv1D(256, 1, activation="relu"))
model.add(MaxPooling1D(4))
model.add(Conv1D(128, 1, activation="relu"))
model.add(MaxPooling1D(5))
model.add(LSTM(200, return_sequences=True))
model.add(LSTM(200, return_sequences=True))
model.add(LSTM(200, return_sequences=True))
model.add(Dense(1, activation='sigmoid'))
有什么建议吗?
【问题讨论】:
-
你是对的,当前模型从 482 个样本中学习,每个样本有 100 个时间步长和 384 个特征,这似乎不是你想要的。这 100 个数组有什么共同点吗?比如,数组 0 的特征 0 是否与数组 1 的特征 0 的类型相同?
-
@SaTa:这些是直接从输入图像中提取的局部特征。因此,每张图像由 100 个向量表示,每个向量有 384 个值。时态 CNN 的目的是掌握这些数据之间的某种关系,再加上 RNN,因为每张图像都与前 N 幅图像密切相关。