Keras的LSTM层中的时间步长是多少?如何选择该参数的值?

eyh26e7m  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(360)

我在理解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层,使用了shape(batch,4,784)。换句话说,我调用timestpe = 4。我认为它应该是5,或者不一定应该等于我想预测的帧数。
在这种情况下,时间步长的真正含义是什么?我需要对值进行排序吗 我的层?我真的很感谢你的支持。
另一方面,我正在考虑将卷积层应用于每个帧,而不再是整个5帧序列,而是逐帧地将卷积层的输出连接到LSTM层,最后连接每个帧的LSTM层的输出状态,尊重帧的顺序,在这种情况下,我考虑使用timestpe = 1。

ntjbwcob

ntjbwcob1#

我调用了timestpe = 4。我认为它应该是5,或者不一定应该等于我想预测的帧数。
你说得对。时间步长不等于要预测的帧数。
让我们用自然语言友好的描述来框定它。
时间步长本质上是用于预测未来步骤的单位数(视频中的秒/分钟/小时/天/帧等)。
例如,您希望预测股票价格,考虑到最近5天。在这种情况下,时间步长= 5,其中T-5 = current_day - 5,T-4 = current_day - 4等。注意,current_day在这里类似于“未来的一天”,就像“提前预测”今天。
你想预测今天的股价。在这种情况下,您需要一步预测。但是,您可能还希望预测当天、明天和后天的股票价格。也就是说,通过考虑T-5,T-4,T-3,T-2,T-1来预测T,T+1,T+2。第二种情况的公认术语称为多步预测
请注意,与“过去”严格相关的时间步长与多步预测的计算无关。
显然,根据你的问题,几乎总是这样的情况,对于多步预测,你可能需要考虑一个更大的“过去”框架,即增加时间步长的数量,以帮助您的LSTM捕获更多的数据相关性。
如果要将其与每批处理的数据量相关联,则可以考虑批处理大小为2等于2个数据块,其中[T-5,T-4,T-3,T-2,T-1]用于预测T。因此,2个块的形式为([T-5,T-4,T-3,T-2,T-1],[T])
当你准备数据并想预测下一帧时,当然你需要过去值(T-5,T-4...)的精确完美顺序在一个块内。你不需要的是从一个视频中得到确切的连续块。
换句话说,你可以有一个像上面描述的视频1中的块,视频9中的块,等等。

相关问题