在反向传播期间,这些情况会有不同的影响:-
我主要怀疑数值,但所有这些都会产生影响。
答案 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)
现在,我们可以使用x
和L2
损失来计算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个元素。
关于第三个选项,如果我理解正确,那是不可能的。您不能使用sum
,mean
或其他任何方法将单个像素错误汇总到标量之前进行反向传播。