假设我在keras中具有以下模型:
model = keras.models.Sequential([
keras.layers.Conv1D(filters=20, kernel_size=4, strides=2, padding="valid",
input_shape=[None, 1]),
keras.layers.GRU(20, return_sequences=True),
keras.layers.GRU(20, return_sequences=True),
keras.layers.TimeDistributed(keras.layers.Dense(1))
])
它将被馈入单变量时间序列数据,并将预测时间序列数据中的下一个值。
它有一个卷积层,用于对输入进行降采样,然后是2个GRU单元,将在每个时间步进行处理。假设这是输入X
和输出Y
的索引形式。该数据集中有51个样本。在每个索引X
,预测Y
在数据集中领先一步。
X: 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 42 43 44 45 46 47 48 49
Y: 1 2 3 4 5 6 7 8 9 10 11 12 13 ... 43 44 45 46 47 48 49 50
在应用卷积层之后,输入X
将发生变化,这意味着我们还必须更改输出Y
。卷积层将从数据集中获取4个样本,并将其转换为代表4个样本的1个标量。由于我们有20个过滤器,因此将对数据集中的4个样本的每个组合进行20次,步幅为2。这就是将卷积层应用于输入数据集的方式:
|-----2-----| |-----5---...------| |-----23----|
|-----1-----| |-----4-----| ... |-----22----|
|-----0----| |-----3-----| |---...|-----21----|
X: 0 1 2 3 4 5 6 7 8 9 10 11 12 ... 42 43 44 45 46 47 48 49
Y: 1 2 3 4 5 6 7 8 9 10 11 12 13 ... 43 44 45 46 47 48 49 50
应用卷积层后,输入X
和修改后的输出Y
如下所示:
X: 0/3 2/5 4/7 6/9 8/11 10/13 ... 42/45 44/47 46/49
Y: 4 6 8 10 12 14 46 48 50
例如,0/3
中的X
表示原始数据中的前4个样本,而新X
中的每个实例实际上是20D向量,因为我们使用了卷积层中有20个过滤器。我们还必须更改输出数据,以使算法无法展望未来。它仍然可以预测时间序列的价值,但我们必须更改Y
,以使现在每个样本都比新的X
领先一步。
假设我编译并训练了该模型。这就是我的困惑:假设我想在现实世界中使用它。我从现实世界中获得了1个样本。如何通过模型处理这一个样本?我是否需要4个样本才能正确应用卷积层?如果我现在只有一个新实例,而不是4,那么该模型如何预测下一个值?会发生什么?我真的很困惑这将如何工作...