# tensorplay.autograd.functional.jacobian

Source: https://www.tensorplay.cn/docs/generated/tensorplay.autograd.functional.jacobian.html

# tensorplay.autograd.functional.jacobian

tensorplay.autograd.functional.jacobian(func, inputs, create_graph=False, strict=False, vectorize=False, strategy='reverse-mode')[[source]](../_modules/tensorplay/autograd/functional.html#jacobian)

Compute the Jacobian of a given function.

Parameters:

- func ( function ) – a Python function that takes Tensor inputs and returns a tuple of Tensors or a Tensor.

- inputs ([tuple](https://docs.python.org/3/library/stdtypes.html#tuple) of Tensors or Tensor ) – inputs to the function func .

- create_graph ([bool](https://docs.python.org/3/library/functions.html#bool) , optional ) – If True , the Jacobian will be computed in a differentiable manner. Note that when strict is False , the result can not require gradients or be disconnected from the inputs. Defaults to False .

- strict ([bool](https://docs.python.org/3/library/functions.html#bool) , optional ) – If True , an error will be raised when we detect that there exists an input such that all the outputs are independent of it. If False , we return a Tensor of zeros as the jacobian for said inputs, which is the expected mathematical value. Defaults to False .

- vectorize ([bool](https://docs.python.org/3/library/functions.html#bool) , optional ) – Not supported by this engine yet; passing True raises [NotImplementedError](https://docs.python.org/3/library/exceptions.html#NotImplementedError).

- strategy ([str](https://docs.python.org/3/library/stdtypes.html#str) , optional ) – Set to "reverse-mode" (default) or "forward-mode" . Forward-mode AD is not supported by this engine yet; passing it raises [NotImplementedError](https://docs.python.org/3/library/exceptions.html#NotImplementedError).

Returns:

if there is a single
input and output, this will be a single Tensor containing the
Jacobian for the linearized inputs and output. If one of the two is
a tuple, then the Jacobian will be a tuple of Tensors. If both of
them are tuples, then the Jacobian will be a tuple of tuple of
Tensors where Jacobian[i][j] will contain the Jacobian of the
ith output and jth input and will have as size the
concatenation of the sizes of the corresponding output and the
corresponding input and will have same dtype and device as the
corresponding input.

Return type:

Jacobian (Tensor or nested tuple of Tensors)

Example

```
>>> def exp_reducer(x):
...     return x.exp().sum(dim=1)
>>> inputs = tensorplay.rand(2, 2)
>>> jacobian(exp_reducer, inputs)
tensor([[[1.4917, 2.4352],
         [0.0000, 0.0000]],
        [[0.0000, 0.0000],
         [2.4369, 2.3799]]])
```
