首页 > 解决方案 > 用于训练的线性变换输出和地面实况的损失

问题描述

我在 pytorch 中有一个预测模型,它接受输入并在特定坐标系中生成输出。在我的过程中,我将输出和基本事实转换为不同的坐标系(二维平移和旋转)。我现在可以计算两个坐标系中的损失,它们具有相同的值(RMSE 和 NLL 损失)。

我在训练中使用哪个损失来运行 loss.backward() 是否重要?

标签: pytorchtransformationbackpropagationloss

解决方案


TLDR:

我在训练中使用哪个损失来运行 loss.backward() 是否重要?

MSE 否,NLL 是。

假设地面实况向量是x并且输出向量是y

旧 MSE =(x-y).T.dot(x-y)

变换后,ground truth 向量变为A.dot(x),输出变为A.dot(y)

新 MSE =变换矩阵在哪里(x-y).T.dot(M).dot(x-y)M=A.T.dot(A)A

由于线性变换的性质,我们也有A.T.dot(A)=I

因此,我们可以看到它M总是会变成单位矩阵,因此 MSE 保持不变。

现在,通常在 Y 是之后的输出并且 x 是目标之后nn.LogSoftmax才 应用的 NLL 损失。(我指的是这个)。Y[x].mean()nn.LogSoftmax

这与线性变换输出和目标后得到的不同。


推荐阅读