python-3.x - 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()
:
我尝试在最后添加一个重塑以强制网络删除最后一个维度,但它似乎没有工作,因为输出形状似乎保持不变。
解决方案
在聊天中与@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
])
这使我能够从图表内部重塑输出。
推荐阅读
- ionic-framework - 错误:使用 LoadingController 时出现“未解析的函数或方法存在()”
- python - 我遇到了 tkinter def 无法启动的问题
- vim - 如何在 Windows 10 系统中使用 gitbash 在 Vim 中包含格式化的 Epitech 标准标头?
- sqlite - 如果表没有主键怎么办
- python - 如何在数据中添加随机白噪声
- c++ - 课堂上的一条线,使整个应用程序崩溃。0xC000005 错误
- javascript - 有没有办法使用 Google Apps 脚本中的 ICU/Intl/v8BreakIterator 遍历文档中的单词?
- c# - 如何在 WPF 的 Xceed PropertyGrid 中隐藏子属性?
- javascript - jquery onclick 不适用于 .load() 函数中的元素
- python - ValueError:以 10 为基数的 int 的无效文字:''