添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何用自定义损失来训练深度神经网络

3 人不认可

我对如何用自定义损失函数训练深度神经网络感兴趣。我在stack overflow上看到了一些帖子,但是没有得到答案。我已经下载了VGG16,冻结了权重并添加了我自己的头。现在我想用自定义损失来训练这个网络,我该怎么做呢?

1 个评论
请提供你所尝试的一些代码的例子,以便我们能够帮助你。
python
tensorflow2.0
Dato Nefaridze
Dato Nefaridze
发布于 2020-08-17
3 个回答
Bryce Wayne
Bryce Wayne
发布于 2020-08-17
0 人赞同

这里是PyTorch中的一个自定义RMSE损失。我希望这能让你对如何实现一个自定义的损失函数有一个具体的想法。你必须创建一个继承 nn.Module 的类,定义初始化和向前传递。

class RMSELoss(nn.Module):
    def __init__(self, eps=1e-9):
        super().__init__()
        self.mse = nn.MSELoss()
        self.eps = eps
    def forward(self,yhat,y):
        loss = torch.sqrt(self.mse(yhat,y) + self.eps)
        return loss
    
-你看到我问的是TF而不是pytorch吗?
Nazmul Hasan
Nazmul Hasan
发布于 2020-08-17
0 人赞同

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

以下是编码样本。

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 ]