如何在Conv2D图层之后添加ConvLSTM2D图层?

时间:2019-06-24 10:58:03

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

我正在为单目图像的深度估计制作一个自动编码器。第一层是卷积层,第二层是卷积LSTM层。如何在Conv2D层之后添加ConvLSTM2D层。

这是我尝试过的代码,但它给出了一个错误。

autoencoder = Sequential()

autoencoder.add(Conv2D(64, (3, 3),strides = 2 , input_shape = (640, 480, 3), activation = 'linear'))
autoencoder.add(LeakyReLU(alpha = 0.1))

autoencoder.add(ConvLSTM2D(256, (3,3), strides = 2, input_shape = (None, 32), return_sequences = True))

我收到以下错误

  

ValueError:输入0与层conv_gr_u2d_1不兼容:预期   ndim = 5,找到的ndim = 4

2 个答案:

答案 0 :(得分:1)

您可能误解了ConvLSTM2D的优点。它适用于您拥有一系列数据的场景,其中每个数据点都是图片。因此,电影将是典型的用例。

因此,无论您输入什么内容,都必须具有(batch_size, timesteps, rows, cols, channels)的形状。另一方面,Conv2D的输出形状为(batch_size, rows, cols, features)。这就是错误告诉您的内容。

从技术上讲,您可以在两者之间添加一个Reshape层并生成所需的任何形状,但是我不认为这对您的情况有什么意义。

反之亦然(首先是ConvLSTM2D,然后是Conv2D)会更有意义。但是随后您需要“电影般”的输入数据。如果我对您的理解正确,那你就没有。

答案 1 :(得分:0)

Conv2D的输入形状应为:

input_shape = (batch_size, img_wd, img_hg, channels) 

例如:

input_shape = (None, 640, 480, 3)

您也不必在ConvGRU2D中添加input_shape参数