Jacobian matrix in PyTorch (original) (raw)

Last Updated : 23 Jul, 2025

Introduction:

The Jacobian is a very powerful operator used to calculate the partial derivatives of a given function with respect to its constituent latent variables. For refresher purposes, the Jacobian of a given function f : \R^{n} \rightarrow \R^{m} with respect to a vector \mathbf{x} = \{x_1, ..., x_n\} \in \R^{n} is defined as

\mathbf{J}_f(\mathbf{x}) = \begin{bmatrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \ldots & \frac{\partial f}{\partial x_n}\end{bmatrix}= \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \ldots & \frac{\partial f_1}{\partial x_n} \\[1ex] \vdots & \ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \ldots & \frac{\partial f_m}{\partial x_n} \end{bmatrix}

Example:

Suppose we have a vector \mathbf{x} = \begin{bmatrix} x_{1} \\[1ex]x_{2} \\[1ex]x_{3} \end{bmatrix} and a function f(\mathbf{x}) = f(x_1,x_2,x_3)= \begin{bmatrix}f_{1} \\[1ex]f_{2}\\[1ex]f_{3}\end{bmatrix} = \begin{bmatrix}x_1+x_2 \\[1ex]x_1 \times x_3 \\[1ex]x_2^{3}\end{bmatrix} . To calculate the Jacobian of f with respect to \mathbf{x} , we can use the above-mentioned formula to get

\mathbf{J}_f(\mathbf{x}) = \begin{bmatrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \frac{\partial f}{\partial x_3}\end{bmatrix}= \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \frac{\partial f_1}{\partial x_3} \\[1ex] \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \frac{\partial f_2}{\partial x_3} \\[1ex] \frac{\partial f_3}{\partial x_1} & \frac{\partial f_3}{\partial x_2} & \frac{\partial f_3}{\partial x_3} \end{bmatrix}=\begin{bmatrix} \frac{\partial (x_1 + x_2)}{\partial x_1} & \frac{\partial (x_1 + x_2)}{\partial x_2} & \frac{\partial (x_1 + x_2)}{\partial x_3} \\[1ex] \frac{\partial (x_1 \times x_3)}{\partial x_1} & \frac{\partial (x_1 \times x_3)}{\partial x_2} & \frac{\partial (x_1 \times x_3)}{\partial x_3} \\[1ex] \frac{\partial x_2^3}{\partial x_1} & \frac{\partial x_2^3}{\partial x_2} & \frac{\partial x_2^3}{\partial x_3} \end{bmatrix} = \begin{bmatrix}1 & 1 & 0 \\[1ex] x_3 & 0 & x_1 \\[1ex] 0 & 3\times x_2^2&0\end{bmatrix}

To achieve the same functionality as above, we can use the jacobian() function from Pytorch's torch.autograd.functional utility to compute the Jacobian matrix of a given function for some inputs.

Syntax: torch.autograd.functional.jacobian(func, inputs, create_graph=False, strict=False, vectorize=False)

Parameters:

Installation:

For this article, you only need the torch utility, which can be downloaded through the pip package manager using:

pip install torch

Example usage of the function:

We'll be using the same function and vector for ease of flow, as discussed in the above example. Since tensors are the basic building blocks of the Pytorch package, we'll be using them for representing both the inputs vectors and the given function. This article assumes a basic familiarity with Pytorch tensors which can be quickly reviewed by going through Pytorch articles.

Theoretical verification:

Suppose we have a vector \mathbf{x} = \begin{bmatrix} x_{1} \\[1ex]x_{2} \\[1ex]x_{3} \end{bmatrix} = \begin{bmatrix} 3 \\[1ex]4 \\[1ex]5 \end{bmatrix} as a given input. By plugging in the values of \mathbf{x} into the above derived equation we will get J_f({\mathbf{x}}) =\begin{bmatrix}1 & 1 & 0 \\[1ex] x_3 & 0 & x_1 \\[1ex] 0 & 3\times x_2^2&0\end{bmatrix}=\begin{bmatrix}1 & 1 & 0 \\[1ex] 5 & 0 & 3 \\[1ex] 0 & 3\times 4^2&0\end{bmatrix}= \begin{bmatrix}1 & 1 & 0 \\[1ex] 5 & 0 & 3 \\[1ex] 0 & 48 & 0\end{bmatrix}

Code: Python implementation to show the working of Jacobian Matrix using Pytorch

Python `

from torch.autograd.functional import jacobian from torch import tensor

#Defining the main function def f(x1,x2,x3): return (x1 + x2, x3*x1, x2**3)

#Defining input tensors x1 = tensor(3.0) x2 = tensor(4.0) x3 = tensor(5.0)

#Printing the Jacobian print(jacobian(f,(x1,x2,x3)))

`

Output:

((tensor(1.), tensor(1.), tensor(0.)), (tensor(5.), tensor(0.), tensor(3.)), (tensor(0.), tensor(48.), tensor(0.)))

The output is exactly similar to our theoretical verification! Using a similar approach, we can calculate the Jacobian matrix of any given function using the Pytorch API.

References:

  1. https://docs.pytorch.org/docs/stable/autograd.html#torch.autograd.functional.jacobian
  2. https://docs.pytorch.org/docs/stable/tensors.html