同时具有卷积层和递归层的模型如何表现?

时间:2020-09-19 10:45:40

标签: python keras deep-learning conv-neural-network recurrent-neural-network

假设我在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,那么该模型如何预测下一个值?会发生什么?我真的很困惑这将如何工作...

0 个答案:

没有答案