0

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

情商

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

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

k:索引通道维度

l:索引参数。

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

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

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

4

1 回答 1

0

在你调用.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
于 2019-09-25T00:40:07.213 回答