像素损失

时间:2019-03-22 12:05:18

标签: deep-learning computer-vision pytorch backpropagation gradient-descent

在反向传播期间,这些情况会有不同的影响:-

  1. 对所有像素进行总和损耗,然后反向传播。
  2. 所有像素的平均损耗然后反向传播
  3. 向后传播所有像素。

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

1 个答案:

答案 0 :(得分:1)

第1个和第2个之间的区别基本上是:由于sum将导致比mean大,因此sum操作产生的梯度幅度会更大,但方向相同

这是一个小例子,让我们先声明必要的变量:

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

现在,我们可以使用xL2损失来计算sum的梯度:

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或其他任何方法将单个像素错误汇总到标量之前进行反向传播。