【问题标题】:Graph disconnected: cannot obtain value for tensor Tensor图表断开:无法获取张量 Tensor 的值
【发布时间】:2019-06-06 16:18:50
【问题描述】:

我必须用生成器和判别器训练一个 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()

我的问题是当我将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)

【问题讨论】:

    标签: python-3.x tensorflow keras deep-learning generative-adversarial-network


    【解决方案1】:

    在这里对您有所帮助的关键见解是,模型就像 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 暗淡。对于n=4 的exp,axis=-1 指的是axis=3。相同的规则适用于连接层。你得到不同的结果吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2018-08-11
    • 2021-09-26
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多