You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyTorch中使用平均相对绝对误差损失函数替换MSE

PyTorch实现平均相对绝对误差损失的方法

核心结论

  • PyTorch官方torch.nn模块没有内置平均相对绝对误差(Mean Relative Absolute Error, MARE/MRAE)损失函数,你找到的实现属于PyTorch Ignite扩展库的贡献指标模块,不属于核心nn包,因此无法通过nn.前缀直接调用。

实现方案

方案1:手动自定义损失(推荐)

该方案无需额外安装依赖,适配性更强,直接继承nn.Module即可实现和内置损失完全一致的调用逻辑:

import torch
import torch.nn as nn

class MeanRelativeAbsoluteError(nn.Module):
    def __init__(self, epsilon: float = 1e-8):
        super().__init__()
        # 加入极小值epsilon避免target为0时出现除以0的数值错误
        self.epsilon = epsilon
    
    def forward(self, y_pred: torch.Tensor, y_true: torch.Tensor) -> torch.Tensor:
        abs_error = torch.abs(y_pred - y_true)
        relative_error = abs_error / (torch.abs(y_true) + self.epsilon)
        return torch.mean(relative_error)

修改你原有代码的损失调用部分即可,将nn.MSELoss()替换为自定义的损失类:

# 训练和验证阶段损失都替换为以下写法
L = MeanRelativeAbsoluteError()
loss = L(out, targets)

你可以根据自己数据集的数值范围调整epsilon的大小,避免数值不稳定。

方案2:调用PyTorch Ignite的实现

如果需要使用官方提供的实现,需要先安装PyTorch Ignite扩展库,再对应导入使用:

  1. 安装依赖:pip install pytorch-ignite
  2. 导入调用:
from ignite.contrib.metrics.regression import MeanAbsoluteRelativeError

注意Ignite提供的该类默认是指标类,如果要作为损失函数反向传播,需要提取计算结果并保证梯度传递,自定义方案更适合训练场景。

内容的提问来源于stack exchange,提问作者MMM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:48:04