我在 中使用该autograd工具PyTorch,并且发现自己需要通过整数索引访问一维张量中的值。像这样的东西:
def basic_fun(x_cloned):
res = []
for i in range(len(x)):
res.append(x_cloned[i] * x_cloned[i])
print(res)
return Variable(torch.FloatTensor(res))
def get_grad(inp, grad_var):
A = basic_fun(inp)
A.backward()
return grad_var.grad
x = Variable(torch.FloatTensor([1, 2, 3, 4, 5]), requires_grad=True)
x_cloned = x.clone()
print(get_grad(x_cloned, x))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
[tensor(1., grad_fn=<ThMulBackward>), tensor(4., grad_fn=<ThMulBackward>), tensor(9., grad_fn=<ThMulBackward>), tensor(16., grad_fn=<ThMulBackward>), tensor(25., grad_fn=<ThMulBackward>)]
Traceback (most recent call last):
File "/home/mhy/projects/pytorch-optim/predict.py", line 74, in <module>
print(get_grad(x_cloned, x))
File "/home/mhy/projects/pytorch-optim/predict.py", line 68, in get_grad
A.backward()
File "/home/mhy/.local/lib/python3.5/site-packages/torch/tensor.py", line 93, in backward …Run Code Online (Sandbox Code Playgroud) (注意:这不是关于反向传播的问题。)我正在尝试在GPU上使用PyTorch张量代替Numpy数组求解非线性PDE。我想计算任意张量的偏导数,类似于中心有限差分numpy.gradient函数的作用。我有其他解决此问题的方法,但是由于我已经在使用PyTorch,所以我想知道是否有可能使用autograd模块(或者通常是任何其他自动分化模块)来执行此操作。
我创建了numpy.gradient函数的张量兼容版本-运行速度快得多。但是,也许有更优雅的方法可以做到这一点。我找不到其他任何资料可以解决这个问题,无论是表明这是可能的还是不可能的。也许这反映了我对自动分化算法的无知。