Deep learning 像素损失
在反向传播过程中,这些情况是否会产生不同的影响:-Deep learning 像素损失,deep-learning,computer-vision,pytorch,backpropagation,gradient-descent,Deep Learning,Computer Vision,Pytorch,Backpropagation,Gradient Descent,在反向传播过程中,这些情况是否会产生不同的影响:- 将所有像素的损失相加,然后反向传播 所有像素上的平均损耗,然后反向传播 在所有像素上单独反向传播 我主要怀疑数值,但所有这些都会产生影响。1号和2号之间的区别基本上是:由于sum将导致大于mean,因此sum操作的梯度幅度将更大,但方向将相同 下面是一个小演示,让我们首先声明必要的变量: x = torch.tensor([4,1,3,7],dtype=torch.float32,requires_grad=True) target = tor
我主要怀疑数值,但所有这些都会产生影响。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)
现在让我们使用L2
损耗和sum
计算x
的梯度:
loss = ((x-target)**2).sum()
loss.backward()
print(x.grad)
这将输出:张量([0.,-2.,-4,6.])
现在使用mean
:(重置x
grad后)
这个输出:张量([0.0000,-0.5000,-1.0000,1.5000])
请注意,后面的渐变正好是sum
的1/4,这是因为这里的张量包含4个元素
关于第三种选择,如果我理解正确的话,那是不可能的。在使用sum
、mean
或任何其他方法将单个像素错误聚合为标量之前,不能反向传播
loss = ((x-target)**2).mean()
loss.backward()
print(x.grad)