Keras 的 LSTM 层中的时间步是什么?以及如何选择该参数的值?

问题描述 投票:0回答:1

我在理解 LSTM 层中的参数“timestep”时遇到问题。我找到了一些意义,但我现在很困惑。有人提到它是训练期间进入模型的每批大小的数据量。另一方面,其他人则认为它是 LSTM 层中单元出现的次数,同时状态从一个单元传递到另一个单元。

重点是我有以下形式的训练数据:

(sequences, number of frames per sequence, width, height, channel = 1)
(2000, 5, 80, 80, 1)

我的模型必须预测以下帧序列,在本例中为 5 个未来帧。该模型由变分自动编码器组成,首先我使用 3D 卷积层来压缩 5 帧的序列,然后调整输出的大小,以便我可以进入仅接受(批次、时间步长、特征)的 LSTM 层。

Model: "sequential"
____________________________________________________________________________________________________
Layer (type)                                 Output Shape                            Param #        
====================================================================================================
conv3d (Conv3D)                              (None, 2, 27, 27, 32)                   19392          
____________________________________________________________________________________________________
batch_normalization (BatchNormalization)     (None, 2, 27, 27, 32)                   128            
____________________________________________________________________________________________________
conv3d_1 (Conv3D)                            (None, 1, 14, 14, 32)                   2654240        
____________________________________________________________________________________________________
batch_normalization_1 (BatchNormalization)   (None, 1, 14, 14, 32)                   128            
____________________________________________________________________________________________________
conv3d_2 (Conv3D)                            (None, 1, 7, 7, 64)                     3211328        
____________________________________________________________________________________________________
batch_normalization_2 (BatchNormalization)   (None, 1, 7, 7, 64)                     256            
____________________________________________________________________________________________________
flatten (Flatten)                            (None, 3136)                            0              
____________________________________________________________________________________________________
reshape (Reshape)                            (None, 4, 784)                          0              
____________________________________________________________________________________________________


lstm (LSTM)                                  (None, 64)                              217344         
____________________________________________________________________________________________________
repeat_vector (RepeatVector)                 (None, 4, 64)                           0              
____________________________________________________________________________________________________
lstm_1 (LSTM)                                (None, 4, 64)                           33024          
____________________________________________________________________________________________________
time_distributed (TimeDistributed)           (None, 4, 784)                          50960          
____________________________________________________________________________________________________
reshape_1 (Reshape)                          (None, 1, 7, 7, 64)                     0              
____________________________________________________________________________________________________


conv3d_transpose (Conv3DTranspose)           (None, 2, 14, 14, 64)                   6422592        
____________________________________________________________________________________________________
batch_normalization_3 (BatchNormalization)   (None, 2, 14, 14, 64)                   256            
____________________________________________________________________________________________________
conv3d_transpose_1 (Conv3DTranspose)         (None, 4, 28, 28, 32)                   5308448        
____________________________________________________________________________________________________
batch_normalization_4 (BatchNormalization)   (None, 4, 28, 28, 32)                   128            
____________________________________________________________________________________________________
conv3d_transpose_2 (Conv3DTranspose)         (None, 8, 84, 84, 1)                    19361          
____________________________________________________________________________________________________
batch_normalization_5 (BatchNormalization)   (None, 8, 84, 84, 1)                    4              
____________________________________________________________________________________________________
cropping3d (Cropping3D)                      (None, 8, 80, 80, 1)                    0              
____________________________________________________________________________________________________
cropping3d_1 (Cropping3D)                    (None, 5, 80, 80, 1)                    0              
====================================================================================================

我终于使用 RESHAPE 层进入 LSTM 层,形状为(batch, 4, 784)。换句话说,我已经调用了timestpe = 4。我认为它应该是5,或者不一定应该等于我想要预测的帧数。

在这种情况下,时间步长的真正含义是什么?我需要对我的图层的值进行排序吗?非常感谢您的支持。

另一方面,我正在考虑将卷积层应用到每一帧,而不是整个5帧序列,而是逐帧应用,然后将卷积层的输出连接到LSTM层,最后连接输出状态每个帧的 LSTM 层,尊重帧的顺序,在这种情况下,我考虑使用 timestpe = 1。

tensorflow keras deep-learning lstm autoencoder
1个回答
4
投票

我已经调用了timestpe = 4。我认为它应该是5,或者不一定应该等于我想要预测的帧数。

你是对的。时间步长不等于您要预测的帧数。

让我们用自然语言友好的描述来构建它。

时间步本质上是用于预测未来步骤的单位数(视频中的秒/分钟/小时/天/帧等)。

例如,您想要根据过去 5 天的情况来预测股票价格。在本例中,时间步长 = 5,其中 T-5 = current_day - 5,T-4 = current_day - 4 等。请注意,current_day 在这里类似于“未来的一天”,例如“提前预测”今天.

您想预测当天的股票价格。在这种情况下,您需要“一步预测”。然而,您可能还想预测当天、明天和后天的股价。也就是说,通过考虑 T,T+1,T+2 来预测

T-5,T-4,T-3,T-2,T-1
。第二种情况的公认术语称为
多步预测
注意与“过去”严格相关的时间步长如何与

多步预测

的计算无关。 显然,根据您的问题,几乎总是这样,对于多步预测,您可能需要考虑更大的“过去”框架,即增加时间步数,以帮助您的 LSTM 捕获更多数据关联。

如果要将其与每批次的数据量联系起来,您可以考虑批量大小为 2 等于 2 块数据,其中

[T-5,T-4,T-3,T-2,T-1]

用于预测 T。因此,2 块的形式 ==

2 * ([T-5,T-4,T-3,T-2,T-1],[T])
当您准备数据并想要预测下一帧时,当然您需要对过去的值(T-5,T-4 ...)

在块内

具有精确完美的顺序。例如,您不需要的是从视频中获得精确的连续块。 换句话说,您可以拥有视频 1 中的上述块、视频 9 中的块等。

© www.soinside.com 2019 - 2024. All rights reserved.