我试图得到d(loss)/d(input)
. 我知道我有两个选择。
第一个选项:
loss.backward()
dlossdx = x.grad.data
第二种选择:
# criterion = nn.CrossEntropyLoss(reduce=False)
# loss = criterion(y_hat, labels)
# No need to call backward.
dlossdx = torch.autograd.grad(outputs = loss,
inputs = x,
grad_outputs = ? )
我的问题是:如果我使用交叉熵损失,我应该grad_outputs
在第二个选项中传递什么?
我放d(CE)/d(y_hat)
吗?由于 pytorch 交叉熵包含 softmax,这将需要我使用 Kronecker delta 预先计算 softmax 导数。
还是我放d(CE)/d(CE)
哪个是torch.ones_like?
一个概念性的答案很好。