【问题标题】:Why does my keras model return more metrics than I specified?为什么我的 keras 模型返回的指标比我指定的多?
【发布时间】:2019-12-12 17:11:45
【问题描述】:

我定义了一个由生成器和鉴别器组成的简单生成对抗网络。生成器编译两次:第一次用于非对抗性训练(没有判别器扩展),第二次用于对抗性训练。

在我构建和编译所有内容后,我可以询问我编译的模型的损失和指标。这是我得到的:

  • net.generator.loss -> 'mean_absolute_error'
  • net.generator.metrics -> []
  • net.combined.loss -> ['mean_absolute_error', 'binary_crossentropy']
  • net.combined.metrics -> []

到目前为止一切顺利,这似乎是合理的。但是当我随后在 net.generator 或 net.combined 上使用 train_on_batch 方法时,返回的损失的格式与我的预期不符。我发现我可以使用 model.metrics_names 进行检查:

  • net.generator.metrics_names -> ['loss']
  • net.combined.metrics_names -> ['loss', 'sequential_15_loss', 'discriminator_loss']

我的问题是:为什么我的 net.combined loss 包含 3 而不是我定义的两个元素(loss=[generator_loss_fct, 'binary_crossentropy')。我不希望它长 3 个元素。 此外,前两个几乎总是相同的,或者至少是相同的 非常非常非常相似。

有人明白吗?如果是,请解释我为什么会这样,如果我做错了什么。 :)

提前致谢!

    # build and compile the generator
    self.encoder = self._build_encoder(input_shape, encoder_filters, kernel_size, latent_size)
    self.decoder = self._build_decoder(self.encoder.layers[-1].output_shape[1:], decoder_filters, kernel_size)
    self.generator = Sequential([self.encoder, self.decoder])

    # compile for non-adversarial training
    self.generator.compile(loss=generator_loss_fct, optimizer=self.optimizer)

    # get the inputs
    masked_img= Input(self.input_shape, name='masked-image')
    filled_img = self.generator(masked_img)

    # build and compile the (global) discriminator
    self.discriminator = self._build_discriminator(input_shape, discriminator_filters, kernel_size)
    self.discriminator.compile(loss='binary_crossentropy', optimizer=self.optimizer, metrics=['accuracy'])

    # let the discriminator judge the validity of the reconstruction
    valid = self.discriminator(filled_img)

    # we freeze the discriminator when training the generator
    self.discriminator.trainable = False

    # build and compile the combined adversarial model
    self.combined = Model(masked_img, [filled_img, valid])
    self.combined.compile(loss=[generator_loss_fct, 'binary_crossentropy'], loss_weights=[self.alpha, self.beta], optimizer=self.optimizer)

【问题讨论】:

  • 您认为您的问题仍未得到解答吗?

标签: keras model metrics loss-function sequential


【解决方案1】:

当你有一个多输出模型时,Keras 会报告总损失,以及每个输出对应的损失。

此外,如果如您所说,前两次损失如此接近,那么您的最后一次损失可能没有任何作用。 如果你愿意训练一个 GAN 模型,你可以看看this Keras example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2014-01-12
    • 2019-10-04
    • 2020-04-12
    • 2012-10-30
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多