像素损失

Loss over pixels

在反向传播过程中,这些情况会不会有不同的效果:-

  1. 总结所有像素的损失然后反向传播。
  2. 所有像素的平均损失然后反向传播
  3. 在所有像素上单独反向传播。

我主要怀疑的是数值,但所有这些都会产生影响。

no 1 和 2 之间的区别基本上是:由于 sum 将导致大于 meansum 操作的梯度幅度将更大,但方向将一样。

这里稍微演示一下,先声明必要的变量:

x = torch.tensor([4,1,3,7],dtype=torch.float32,requires_grad=True)
target = torch.tensor([4,2,5,4],dtype=torch.float32)

现在让我们使用 L2 损失和 sum:

计算 x 的梯度
loss = ((x-target)**2).sum()
loss.backward()
print(x.grad)

这输出:tensor([ 0., -2., -4., 6.])

现在使用 mean:(重置 x 毕业后)

loss = ((x-target)**2).mean()
loss.backward()
print(x.grad)

这输出:tensor([ 0.0000, -0.5000, -1.0000, 1.5000]) 注意后面的梯度是 sum 的 1/4,这是因为这里的张量包含 4 个元素。

关于第三个选项,如果我没有理解错的话,那是不可能的。在使用 summean 或其他任何方式将单个像素错误聚合为标量之前,您不能进行反向传播。