如何计算PyTorch中两个一维张量对应元素的逐元素均方误差
实现逐元素均方误差(Element-wise MSE)的两种实用方法
没问题,要拿到每个对应元素的均方误差其实超简单,完全不用折腾复杂逻辑,给你两种直接能用的方法:
方法一:手动直接计算(最直观)
逐元素MSE的本质就是每个预测值与真实值差值的平方,直接用PyTorch的张量运算就能实现:
import torch def elementWiseMSE(y_pred, y_true): # 返回和输入形状完全一致的逐元素均方误差张量 return torch.square(y_pred - y_true)
调用这个函数后,返回的loss_tensor形状就是torch.Size([2730441, 1]),完美匹配你的需求。
方法二:利用PyTorch内置MSELoss类
如果你更习惯用PyTorch原生的损失函数,只需要修改reduction参数就行——默认的reduction='mean'会返回整体均值,改成reduction='none'就会保留逐元素的损失值:
import torch # 初始化损失函数,设置reduction为'none'以保留逐元素结果 mse_loss_fn = torch.nn.MSELoss(reduction='none') # 计算逐元素MSE loss_tensor = mse_loss_fn(y_pred, y_true)
这个方法得到的结果和手动计算完全一致,输出形状同样是[2730441, 1]。
快速验证效果
你可以用小张量测试下结果是否符合预期:
y_pred = torch.tensor([[1.0], [2.0], [3.0]]) y_true = torch.tensor([[0.0], [2.0], [4.0]]) # 方法一输出 print(elementWiseMSE(y_pred, y_true)) # 方法二输出 print(mse_loss_fn(y_pred, y_true))
两种方法的输出都是:
tensor([[1.], [0.], [1.]])
内容的提问来源于stack exchange,提问作者Guilty
相关产品推荐
相关产品推荐

