import torch
x=torch.rand(300,1)
dydx=torch.zeros_like(x)
fc=torch.nn.Linear(1,1)
x.requires_grad=True
for ii in range(x.size(0)):
xi=x[ii,0:]
yi=torch.tanh(fc(xi))
dydx[ii]=torch.autograd.grad(yi,xi,create_graph=True)[0]
dydxsum=(dydx**2).sum()
dydxsum.backward()
在上面的代码中,x被拆分以节省内存和时间。但是,当x的大小变大时,仍然需要并行化(在CUDA中)。如果必须通过修补Pytorch来实现,则将对从何处开始的提示表示赞赏。