ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

损失函数总结(十六):NRMSELoss、RRMSELoss

损失函数总结(十六):NRMSELoss、RRMSELoss

损失函数总结(十六):MSLELoss、RMSLELoss

  • 1 引言
  • 2 损失函数
    • 2.1 NRMSELoss
    • 2.2 RRMSELoss
  • 3 总结

1 引言

在前面的文章中已经介绍了介绍了一系列损失函数 (L1LossMSELossBCELossCrossEntropyLossNLLLossCTCLossPoissonNLLLossGaussianNLLLossKLDivLossBCEWithLogitsLossMarginRankingLossHingeEmbeddingLossMultiMarginLossMultiLabelMarginLossSoftMarginLossMultiLabelSoftMarginLossTripletMarginLossTripletMarginWithDistanceLossHuber LossSmoothL1LossMBELossRAELossRSELossMAPELossRMSELossLogCosh LossMSLELossRMSLELoss)。在这篇文章中,会接着上文提到的众多损失函数继续进行介绍,给大家带来更多不常见的损失函数的介绍。这里放一张损失函数的机理图:
在这里插入图片描述

2 损失函数

2.1 NRMSELoss

Normalized Root Mean Squared Error (归一化均方根误差,NRMSE) 将RMSE的值变成(0,1)之间, 有助于不同尺度模型之间的比较。NRMSELoss 的数学表达式如下:
L ( Y , Y ′ ) = 1 n ∑ i = 1 n ( y i − y i ′ ) 2 y ‾ L(Y, Y') = \frac{\sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i-y_i')^2}}{\overline y} L(Y,Y)=yn1i=1n(yiyi)2

其中:

  • y ‾ \overline y y: 表示观测值的平均值范围(定义为最大值减去最小值)。

代码实现(Pytorch):

import torch
import torch.nn as nn# 创建模型的预测值和真实观测值
predicted = torch.tensor([2.0, 4.0, 6.0, 8.0, 10.0], dtype=torch.float32)
observed = torch.tensor([1.5, 4.2, 5.8, 7.9, 9.8], dtype=torch.float32)# 自定义 NRMSE 损失函数
def nrmse_loss(predicted, observed):# 创建 MSLE 损失函数msle_loss = nn.MSELoss()# 计算 MSLE Lossrmse = torch.sqrt(msle_loss(predicted , observed ))observed_range = torch.max(observed) - torch.min(observed)nrmse = rmse / observed_rangereturn nrmse# 计算 NRMSE
loss = nrmse_loss(predicted, observed)# 打印 NRMSE
print("Normalized Root Mean Squared Error (NRMSE):", loss.item())

NRMSELoss 与 RMSLE一致,存在低估比高估受到更严重的惩罚的问题。因此,仅在特殊情况使用。。。。

2.2 RRMSELoss

Relative Root Mean Squared Error (相对均方根误差,RRMSE) 是没有维度的 RMSE 变体。RRMSE 是一种均方根误差度量,它已根据实际值进行缩放,然后由均方根归一化。虽然原始测量的尺度限制了 RMSE,但 RRMSE 可用于比较各种测量方法。RRMSELoss 的数学表达式如下:
L ( Y , Y ′ ) = 1 n ∑ i = 1 n ( y i − y i ′ ) 2 ∑ i = 1 n ( y i ′ ) 2 L(Y, Y') = \sqrt\frac{{\frac{1}{n}\sum_{i=1}^{n}(y_i-y_i')^2}}{\sum_{i=1}^{n}(y_i')^2 } L(Y,Y)=i=1n(yi)2n1i=1n(yiyi)2

代码实现(Pytorch):

import torch
import torch.nn as nn# 创建模型的预测值和真实观测值
predicted = torch.tensor([2.0, 4.0, 6.0, 8.0, 10.0], dtype=torch.float32)
observed = torch.tensor([1.5, 4.2, 5.8, 7.9, 9.8], dtype=torch.float32)# 自定义 RRMSE损失函数
def rrmse_loss(predicted, observed):# 创建 MSLE 损失函数msle_loss = nn.MSELoss()# 计算 MSLE Lossmse = msle_loss(predicted , observed )robs_sum = torch.sum(torch.square(observed))rrmse = mse / robs_sum return rrmse # 计算 RRMSE
loss = rrmse_loss(predicted, observed)# 打印 RRMSE
print("Relative Root Mean Squared Error (RRMSE):", loss.item())

RRMSE更多的是作为一种评价指标来使用。损失函数的话更多的还是使用MSELoss。。。。

3 总结

到此,使用 损失函数总结(十六) 已经介绍完毕了!!! 如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。如果存在没有提及的损失函数也可以在评论区提出,后续会对其进行添加!!!!

如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦😄。

返回列表