【问题标题】:How to add a ConvLSTM2D layer after a Conv2D layer?如何在 Conv2D 层之后添加 ConvLSTM2D 层?
【发布时间】:2019-11-06 04:12:15
【问题描述】:

我正在制作一个自动编码器,用于根据单目图像进行深度估计。第一层是卷积层,第二层是卷积 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

【问题讨论】:

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


    【解决方案1】:

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

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

    从技术上讲,您可以在它们之间添加一个Reshape 层并生成您想要的任何形状,但我看不出这在您的场景中有什么意义。

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

    【讨论】:

      【解决方案2】:

      Conv2D 的输入形状应该是:

      input_shape = (batch_size, img_wd, img_hg, channels) 
      

      例如:

      input_shape = (None, 640, 480, 3)
      

      而且您不必在ConvGRU2D 中添加 input_shape 参数

      【讨论】:

        猜你喜欢
        • 2019-06-07
        • 1970-01-01
        • 2020-02-02
        • 1970-01-01
        • 2021-06-18
        • 2020-10-28
        • 1970-01-01
        • 2017-09-23
        • 2019-01-14
        相关资源
        最近更新 更多