【问题标题】:how do I implement ssim for loss function in keras?如何在 keras 中实现 ssim 的损失函数?
【发布时间】:2019-08-31 04:15:48
【问题描述】:

我需要 SSIM 作为网络中的损失函数,但我的网络有 2 个输出。我需要将 SSIM 用于第一个输出,然后将 cross-entropy 用于下一个。损失函数是它们的组合。但是,我需要更高的 SSIM 和更低的cross-entropy,所以我认为它们的组合是不正确的。另一个问题是我在 keras 中找不到 SSIM 的实现。

Tensorflow 有tf.image.ssim,但它接受图像,我认为我不能在损失函数中使用它,对吧?你能告诉我我该怎么做吗?我是 keras 和深度学习的初学者,我不知道如何将 SSIM 作为 keras 中的自定义损失函数。

【问题讨论】:

    标签: python tensorflow keras loss-function


    【解决方案1】:

    看看here Keras 中的 SSIM 丢失。 您可以编写自定义损失函数并为一个预测创建 SSIM 损失,为另一个预测创建交叉熵。您可以返回两个损失的加权总和作为最终损失。

    【讨论】:

    • 这意味着如果我想最小化损失函数我应该使用 1-SSIM 并且我不能使用带有交叉熵的 SSIM 来最小化我的损失函数,对吧?
    • 你的工作是计算损失,你的优化器试图最小化它。我不确定你在问什么。
    • 我的意思是图像处理中更好的 SSIM 越高,它应该接近 1,但 mse 应该接近于零,以获得更好的算法。所以我认为如果我使用 SSIM 作为损失函数,优化器应该最大化它而不是最小化。所以这意味着我应该最小化 1 - SSIM,对吧?
    • 您可以使用最小化mse - ssim(适当加权)。所以,当你最小化这个数量时,mse 被最小化,ssim 被最大化。
    【解决方案2】:

    其他选择是 ssim_loss = 1 - tf.reduce_mean(tf.image.ssim(target, output, max_val=self.max_val))

    那么 combine_loss = mae (or mse) + ssim_loss 通过这种方式,您可以将它们都最小化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 2021-05-23
      • 2021-10-25
      • 2019-10-13
      • 2021-04-23
      相关资源
      最近更新 更多