Convolution2D + LSTM与ConvLSTM2D

时间:2018-04-01 23:14:53

标签: python tensorflow keras

12是否相同?

  1. 使用Convolution2D图层和LSTM图层
  2. 使用ConvLSTM2D
  3. 如果有任何不同,你能为我解释一下吗?

2 个答案:

答案 0 :(得分:10)

它们并不完全相同,原因如下:

1。使用Convolution2D图层和LSTM图层

众所周知,Convolution2D适用于捕获图像或空间要素,而LSTM则用于检测一段时间内的相关性。但是,通过堆叠这些层,可能无法正确捕获空间和时间特征之间的相关性。

2。使用ConvLSTM2D

为了解决这个问题,Xingjian Shi et al.提出了一种能够捕获时空相关性的网络结构,即ConvLSTM。在Keras中,这反映在ConvLSTM2D类中,该类计算输入和循环变换中的卷积运算。

Keras代码

为了说明这一点,您可以看到here LSTM代码,如果您从call转到LSTMCell方法,则只会看到:

    x_i = K.dot(inputs_i, self.kernel_i)
    x_f = K.dot(inputs_f, self.kernel_f)
    x_c = K.dot(inputs_c, self.kernel_c)
    x_o = K.dot(inputs_o, self.kernel_o)

相反,ConvLSTM2DCell类调用:

    x_i = self.input_conv(inputs_i, self.kernel_i, self.bias_i, padding=self.padding)
    x_f = self.input_conv(inputs_f, self.kernel_f, self.bias_f, padding=self.padding)
    x_c = self.input_conv(inputs_c, self.kernel_c, self.bias_c, padding=self.padding)
    x_o = self.input_conv(inputs_o, self.kernel_o, self.bias_o, padding=self.padding)
    h_i = self.recurrent_conv(h_tm1_i, self.recurrent_kernel_i)
    h_f = self.recurrent_conv(h_tm1_f, self.recurrent_kernel_f)
    h_c = self.recurrent_conv(h_tm1_c, self.recurrent_kernel_c)
    h_o = self.recurrent_conv(h_tm1_o, self.recurrent_kernel_o)

其中:

def input_conv(self, x, w, b=None, padding='valid'):
    conv_out = K.conv2d(x, w, strides=self.strides,
                        padding=padding,
                        data_format=self.data_format,
                        dilation_rate=self.dilation_rate)
    if b is not None:
        conv_out = K.bias_add(conv_out, b,
                              data_format=self.data_format)
    return conv_out

def recurrent_conv(self, x, w):
    conv_out = K.conv2d(x, w, strides=(1, 1),
                        padding='same',
                        data_format=self.data_format)
    return conv_out

LSTM中,h_x(重复转换)的等价物将是:

K.dot(h_tm1_x, self.recurrent_kernel_x)

而不是ConvLSTM2D

self.recurrent_conv(h_tm1_x, self.recurrent_kernel_x)

无法使用堆叠的Conv2DLSTM图层计算这些转换。

答案 1 :(得分:5)

  
      
  1. 使用Convolution2D图层和LSTM图层
  2.   

在此技术中,您可以堆叠卷积和LSTM图层。卷积层可帮助您学习空间特征,LSTM可帮助您及时了解相关性。

  

2.使用ConvLSTM2D

ConvLSTM是一个LSTM,其中门(输入状态和状态到状态转换)是卷积运算。
研究论文 - Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting

More about ConvLSTM in this SO answer