首页 > 解决方案 > Keras 输出形状有一个额外的维度

问题描述

我有一个神经网络,它接收 500 像素 x 500 像素的 RGB 彩色图像,并且还会输出另一个相同尺寸的图像。

这是我的网络结构:

Generative_Model = Sequential([ 

   Conv2D(32, (6, 6), padding="same", name="generative", input_shape=(500,500, 3), data_format="channels_last")  

   PReLU(alpha_initializer='zeros'), 

   Conv2D(3, (3, 3), padding="same"), 
   PReLU(alpha_initializer='zeros', name="outp1"), 

])

我遇到的问题是出来的尺寸是 [None, 500, 500, 3] 虽然我期望它们是 [500, 500, 3]。我不确定额外维度是从哪里来的。

在离开网络之前移除维度很重要,因为这会馈送到第二个对抗网络。

这是我打印时得到的model.summary()

model.summary() 的输出

我尝试在最后添加一个重塑以强制网络删除最后一个维度,但它似乎没有工作,因为输出形状似乎保持不变。

标签: python-3.xtensorflowkeras

解决方案


在聊天中与@Dodge 交谈时,他向我指出了以下文档:

https://www.tensorflow.org/api_docs/python/tf/keras/layers/Reshape

这表明额外的 None 来自批次长度。我需要将第一个网络的输出馈送到第二个网络的输出中,而第二个网络的输出预计没有批量维度,所以我使用第一个网络外部的重塑来删除它,如下所示:

#Adversierial network which is comprised of a generator network and a discriminator network.
self.model = Sequential([
   Gen_Input, # Generator Network
   Reshape((500, 500, 3), input_shape=(500, 500, 3)),
   discriminative_model.Input # Discriminator Network
        ])

这使我能够从图表内部重塑输出。


推荐阅读