pytorch - 用于训练的线性变换输出和地面实况的损失
问题描述
我在 pytorch 中有一个预测模型,它接受输入并在特定坐标系中生成输出。在我的过程中,我将输出和基本事实转换为不同的坐标系(二维平移和旋转)。我现在可以计算两个坐标系中的损失,它们具有相同的值(RMSE 和 NLL 损失)。
我在训练中使用哪个损失来运行 loss.backward() 是否重要?
解决方案
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
这与线性变换输出和目标后得到的不同。
推荐阅读
- powershell - [System.Web.Security.Membership]::GeneratePassword() - 找不到类型
- c# - OnItemDataBound 将列表视图中的链接按钮注册到更新面板脚本管理器,但是,它们仅在第一次单击时起作用
- java - 具有相同存储库和实体的多个数据源
- database - 如何在 GDPR 下将用户名存储在数据库中?
- c - 比较频繁输入数据和存储 MAX 和 MIN 值的快速方法
- css - 即使删除了 margin 属性,元素仍然有边距
- jquery - Jquery Datepicker 输入
- python - Python3:仅将更新的 CSV 文件的新行添加到 MySQL 数据库
- jquery - 显示 Ajax 列表
- ios - iOS 分配给 BLE 设备的设备 UUID 是否随时间稳定?