Hello! I was trying to translate my PyTorch code into LibTorch.

Using the following PyTorch code I was computing second-order derivatives of nn.modules.

```
import torch
from torch.autograd import Variable
def derivative(u,x,order = 1):
ones = torch.ones_like(u)
deriv = torch.autograd.grad(u, x, create_graph=True, grad_outputs=ones)[0]
for i in range(1,order):
ones = torch.ones_like(deriv)
deriv = torch.autograd.grad(deriv, x, create_graph=True, grad_outputs=ones)[0]
return deriv
```

Now I am trying to write the same function in LibTorch:

```
torch::Tensor derivative(torch::Tensor u, torch::Tensor x, int order = 1)
{
torch::Tensor ones = torch::ones_like(u);
torch::Tensor deriv = torch::autograd::grad({u}, {x}, /*grad_outputs=*/{ones}, /*create_graph=*/true, /*allow_unused=*/false)[0].requires_grad_(true);
for (int i = 0;i < order; i++)
{
torch::Tensor ones = torch::ones_like(deriv);
deriv = torch::autograd::grad({deriv}, {x}, /*grad_outputs=*/{ones}, /*create_graph=*/true, /*allow_unused=*/false)[0];
}
return deriv;
}
```

If I omit, the `requires_grad_(true)`

I get an error that the Tensor `deriv`

does not require a gradient, although this was the case in PyTorch… Thus I added `requires_grad_(true)`

.

Now I get the error:

```
One of the differentiated Tensors appears to not have been used in the graph. Set allow_unused=True if this is the desired behavior.
```

I don’t want to set `allow_unused=true`

in my C++ code, since then I don’t think that my second derivatives will be correct anymore. In Python it all worked with `allow_unused=False`

.

How can I fix my errors and compute the second derivative of a torch::nn::Module in LibTorch correctly?