繁体   English   中英

图表已断开连接:无法获取张量张量的值

[英]Graph disconnected: cannot obtain value for tensor Tensor

我必须使用Generator和Discriminator训练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

我的鉴别器网络如下。 鉴别器网络的第一步是我必须将鉴别器的输入与Generator的输出连接起来。

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()

我的问题是,当我将concatenated_input传递给convolution层时,出现以下错误。

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: []

如果我删除串联层,则可以很好地工作,但是为什么串联后输入和Generator_output的形状也相同(512,512,3)(512,512,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

要一起训练它们,您可以创建另一个具有所有必需输入的模型,称为生成器/鉴别器。 考虑使用锁定和钥匙构想,每个模型都有一些输入,只要您提供正确的输入,就可以像使用另一个模型中的图层一样使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM