如何通过自定义损失训练深度神经网络

时间:2020-08-17 06:20:46

标签: python tensorflow2.0

我对如何使用自定义损失函数训练深度神经网络感兴趣。我已经看到堆栈溢出的帖子,但没有得到答复。我已经下载了VGG16并冻结了砝码,并添加了自己的头部。现在,我想通过自定义损失来训练该网络,该怎么办?

3 个答案:

答案 0 :(得分:1)

这是PyTorch中的自定义RMSE丢失。我希望这能为您提供有关实现自定义损失函数的具体思路。您必须创建一个继承OLD的类,定义初始化和正向传递。

db.collection.updateMany(
  { "records.type": "CURRENT" },
  [{
    $set: {
      records: {
        $map: {
          input: "$records",
          as: "r",
          in: {
            $cond: {
              if: { $eq: ["$$r.type", "CURRENT"] },
              then: {
                type: "$$r.type",
                value: {
                  $add: [
                    "$$r.value",
                    {
                      $reduce: {
                        input: "$records",
                        initialValue: 0,
                        in: {
                          $cond: {
                            if: { $eq: ["$$this.type", "OLD" ] },
                            then: { $add: ["$$this.value", "$$value"] },
                            else: "$$value"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              else: "$$r"
            }
          }
        }
      }
    }
  },
  {
    $set: {
      records: {
        $filter: {
          input: "$records",
          as: "r",
          cond: { $ne: ["$$r.type", "OLD"] }
        }
      }
    }
  }
])

答案 1 :(得分:1)

您可以简单地使用两个输入参数(真实值,预测值)定义一个函数。然后,您可以通过自己的方法使用这些值来计算损失。

以下是编码示例:

def custom_loss( y_true , y_pred ):
    tf.losses.mean_squared_error( y_true , y_pred ) 

在此示例中,我使用了tf后端的mse。但是您可以在此处使用手动计算。 使用此损失函数编译模型。

model.compile(
    optimizer=your_optimizer,
    loss=custom_loss
)

您还可以定义自己的自定义指标,以便在培训期间进行判断。

def custom_metric( y_true , y_pred ):
    return calculate_your_metric( y_true , y_pred ) 

最后,用它编译

model.compile(
    optimizer=your_optimizer,
    loss=custom_loss,
    metrics=[ custom_metric ]
)

答案 2 :(得分:0)

有几个示例和存储库显示了如何实现听起来像您所指的感觉损失。当然,您可以根据自己的问题,对这些模型中的某些方法进行概括和学习。如果这样做,建议您撰写并分享。除了使用一些预训练的vgg模型外,我看不到其他任何示例,打破这种模式可能是一个不错的贡献!无论如何,您可能会发现以下其他答案很有用:

Implement perceptual loss with pretrained VGG using keras

VGG, perceptual loss in keras