【问题标题】:Computing Output Pixel-wise Gradient Norm in PyTorch在 PyTorch 中计算输出逐像素梯度范数
【发布时间】:2020-01-24 19:34:25
【问题描述】:

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

其中 x 是由具有参数 \theta 的模型生成的相同维度的输出,并且

i,j:索引二维输出特征图的高宽

k:索引通道维度

l:索引参数。

我如何使用 x.backward() 完成此操作?有没有一种有效的方法来做到这一点?

如果我执行 x.backward(torch.ones_like(x)),我将计算上述等式中的梯度之和,而不是它们的绝对值之和。

执行此操作的蛮力方法是遍历输出映射中的每个像素并计算 .backward()。但是,那将是非常昂贵的。有没有避免循环的有效方法?

【问题讨论】:

    标签: python deep-learning pytorch autograd autodiff


    【解决方案1】:

    在你调用 .backward() 处理你的损失之后,PyTorch 会为你计算所有梯度,每个梯度都有一个 .norm() 函数。也许这就是你要找的东西?

    例如:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 2021-09-11
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多