PyTorch输出像素梯度范数的计算

2024-05-29 04:03:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种有效的方法来计算每个示例定义的{x}维度(b x c x h x w):

eq

其中x是参数θ模型生成的相同尺寸的输出,以及

i,j:索引2D输出特征图的高度和宽度

k:索引通道维度

l:索引参数。你知道吗

如何使用x.backward()实现这一点?有没有有效的方法?你知道吗

如果我做了x(火炬。你喜欢的(x) ),我将计算上述方程中梯度的和,而不是它们的绝对值之和。你知道吗

要做到这一点,暴力方法是在输出映射中的每个像素上循环,然后compute.backward()。但是,这将是难以置信的昂贵。有没有一个有效的方法来避免循环?你知道吗


Tags: 方法模型示例参数宽度高度定义尺寸
1条回答
网友
1楼 · 发布于 2024-05-29 04:03:44

在你调用.backward()你的损失之后,PyTorch为你计算所有的梯度,每个梯度都有一个^{}函数。也许这就是你要找的?你知道吗

例如:

x = torch.rand((4,3,3), requires_grad=True)   # Some output volume
y = torch.rand((4,3,3), requires_grad=True)   # Some output volume
z = x + y
loss = z.sum()
loss.backward() 

print(x.grad)          # Print gradients for x
print(x.grad.norm(1))  # Print the L1 norm for these gradients

相关问题 更多 >

    热门问题