Python 3.x 图形已断开连接:无法获取张量的值

Python 3.x 图形已断开连接:无法获取张量的值,python-3.x,tensorflow,keras,deep-learning,generative-adversarial-network,Python 3.x,Tensorflow,Keras,Deep Learning,Generative Adversarial Network,我必须训练一个带有发生器和鉴别器的GAN网络。我的发电机网络如下 def Generator(image_shape=(512,512,3): inputs = Input(image_shape) # 5 convolution Layers # 5 Deconvolution Layers along with concatenation # output shape is (512,512,3) model=Model(inputs=inputs,outputs=ou

我必须训练一个带有发生器和鉴别器的GAN网络。我的发电机网络如下

def Generator(image_shape=(512,512,3):
  inputs = Input(image_shape)
  # 5 convolution Layers
  # 5 Deconvolution Layers along with concatenation
  # output shape is (512,512,3) 
  model=Model(inputs=inputs,outputs=outputs, name='Generator')
  return model, output
我的鉴别器网络如下。鉴别器网络的第一步是我必须把鉴别器的输入和发生器的输出连接起来

def Discriminator(Generator_output, image_shape=(512,512,3)):
  inputs=Input(image_shape)
  concatenated_input=concatenate([Generator_output, inputs], axis=-1)
  # Now start applying Convolution Layers on concatenated_input
  # Deconvolution Layers
  return Model(inputs=inputs,outputs=outputs, name='Discriminator')
启动架构

G, Generator_output=Generator(image_shape=(512,512,3))
G.summary

D=Discriminator(Generator_output, image_shape=(512,512,3))
D.summary()
我的问题是当我将
串联输入
传递到
卷积
层时,它会得到以下错误

Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(?, 512, 512, 3), dtype=float32) at layer "input_1". The following previous layers were accessed without issue: []

如果我删除了连接层,它可以很好地工作,但是为什么它在连接层之后不工作,尽管连接中输入和生成器输出的形状也是相同的,即
(512512,3)

在这里帮助您的关键洞见是,模型就像Keras中的层,但是自包含的。因此,要将一个模型输出连接到另一个,您需要说第二个模型接收匹配形状的输入,而不是直接传递张量:

def Discriminator(gen_output_shape, image_shape=(512,512,3)):
  inputs=Input(image_shape)
  gen_output=Input(gen_output_shape)
  concatenated_input=concatenate([gen_output, inputs], axis=-1)
  # Now start applying Convolution Layers on concatenated_input
  # Deconvolution Layers
  return Model(inputs=[inputs, gen_output],outputs=outputs, name='Discriminator')
然后,您可以像使用图层一样使用它:

G=Generator(image_shape=(512,512,3))
D=Discriminator((512,512,3), image_shape=(512,512,3))
some_other_image_input = Input((512,512,3))
discriminator_output = D(some_other_image_input, G) # model is used like a layer
# so the output of G is connected to the input of D
D.summary()
gan = Model(inputs=[all,your,inputs], outputs=[outputs,for,training])
# you can still use G and D like separate models, save them, train them etc

要将它们一起训练,可以创建另一个具有所有必需输入的模型,调用生成器/鉴别器。考虑使用锁和键的思想,每个模型都有一些输入,只要提供正确的输入,就可以像在另一个模型中的层一样使用它们

完全明白。请解决我的另一个问题,连接层时axis=-1和axis=3的效果如何。我确实搜索了它,但什么也没有得到。
axis=-1
指的是
nth
dims。对于
n=4
的exp,
axis=-1
axis=3
。同样的规则也适用于连接层。你得到了不同的结果吗?