为什么torch.nn.functional.mse_loss(x1,x2)
的结果与MSE的直接计算结果不同?
我要复制的测试代码:
import torch
import numpy as np
# Think of x1 as predicted 2D coordinates and x2 of ground truth
x1 = torch.rand(10,2)
x2 = torch.rand(10,2)
mse_torch = torch.nn.functional.mse_loss(x1,x2)
print(mse_torch) # 0.1557
mse_direct = torch.nn.functional.pairwise_distance(x1,x2).square().mean()
print(mse_direct) # 0.3314
mse_manual = 0
for i in range(len(x1)) :
mse_manual += np.square(np.linalg.norm(x1[i]-x2[i])) / len(x1)
print(mse_manual) # 0.3314
正如我们所看到的,torch的mse_loss
的结果是0.1557
,与手工MSE计算产生0.3314
不同。
**实际上,mse_loss
的结果正好等于直接结果乘以点的维数(这里是2)。
这是怎么回事
1条答案
按热度按时间jgzswidk1#
不同之处在于torch.nn.functional.mse_loss(x1,x2)在计算平方误差时不对坐标应用求和运算。然而,torch.nn.functional.pairwise_distance和np.linalg.norm对坐标应用求和运算。可以通过以下方式重现计算的mse值:
或者,如果你想使用修改的MSE损失来重现成对距离函数,你可以通过以下方式来实现: