PyTorch 中的雅可比矩阵
在本文中,我们将了解雅可比矩阵以及如何在 PyTorch 中使用不同方法计算该矩阵。我们在各种机器学习应用中使用雅可比矩阵。
雅可比矩阵
我们使用雅可比矩阵来计算输入和输出变量之间的关系。雅可比矩阵具有向量值函数的所有偏导数。我们可以在各种机器学习应用中使用这个矩阵。以下是它的一些用法 −
用于分析多元微积分中的函数梯度和导数。
求解系统微分方程。
计算向量值函数的逆。
分析动态系统的稳定性。
在 PyTorch 中计算雅可比矩阵 −
首先,我们必须使用以下命令安装 pytorch 模块 −
pip install torch
为了计算雅可比矩阵值,我们使用 PyTorch 提供的函数 torch.autograd. functional.jacobian(),它用于计算任何给定函数的雅可比值。此函数接受的参数如下 -
func - 这是一个 Python 函数,它将张量作为输入,并在对输入张量执行某些操作后返回张量作为输出或张量元组。
inputs - 这是我们想要发送到 func 函数的输入,它可以是张量或张量元组。
让我们看看计算雅可比矩阵的不同程序。
示例 1:创建简单矩阵并计算雅可比矩阵。
import torch mat = torch.tensor([[1.0, 2.0],[3.0, 4.0]]) jacobian = torch.autograd.functional.jacobian(lambda val: val.sum(), mat) print("Jacobian Matrix:") print(jacobian)
输出
Jacobian Matrix: tensor([[1., 1.], [1., 1.]])
解释
在上面的程序中,我们使用 PyTorch 提供的张量函数创建了 2*2 矩阵。我们使用来自 torch.autograd. functional 的雅可比函数来计算雅可比矩阵。lambda val: val.sum( 将矩阵作为输入并计算矩阵的总和。
示例 2:计算矩阵乘法函数的雅可比矩阵。
import torch def mat_mul(A, B): return torch.mm(A, B) mat1 = torch.tensor([[2.0, 3.0],[4.0, 5.0]]) mat2 = torch.tensor([[1.0, 2.0],[3.0, 4.0]]) jacobian = torch.autograd.functional.jacobian(lambda x: mat_mul(mat1, x), mat2) print("Jacobian Matrix:") print(jacobian)
输出
Jacobian Matrix: tensor([[[[2., 0.], [3., 0.]], [[0., 2.], [0., 3.]]], [[[4., 0.], [5., 0.]], [[0., 4.], [0., 5.]]]])
解释
在上面的程序中,我们使用 PyTorch 提供的 torch.mm 函数创建两个矩阵 mat1、mat2。我们使用 jacobian 函数通过函数 lambda x: mat_mul(mat1, x), mat2
计算雅可比矩阵。示例 3:通过创建随机矩阵计算雅可比矩阵。
import torch rand_matrix = torch.randn((3, 2)) jacobian = torch.autograd.functional.jacobian(lambda val: val.sum(), rand_matrix) print("Jacobian Matrix:") print(jacobian)
输出
Jacobian Matrix: tensor([[1., 1.], [1., 1.], [1., 1.]])
解释
在上面的程序中,我们使用 torch.randn 函数创建 3*2 随机矩阵,该函数使用标准正态分布创建值。我们使用雅可比函数 torch.autograd. functional 来计算雅可比矩阵元素和。
示例 4:矩阵平方函数的雅可比矩阵。
import torch def mat_sq(M): return torch.mm(M, M) mat= torch.tensor([[2.0, 3.0],[4.0, 5.0]]) jacobian = torch.autograd.functional.jacobian(lambda ele: mat_sq(ele), mat) print("Jacobian Matrix:") print(jacobian)
输出
Jacobian Matrix: tensor([[[[ 4., 4.], [ 3., 0.]], [[ 3., 7.], [ 0., 3.]]], [[[ 4., 0.], [ 7., 4.]], [[ 0., 4.], [ 3., 10.]]]])
解释
在上面的程序中,我们创建了名为 mat_sq 的函数,该函数用于使用 PyTorch 提供的函数 torch.mm 创建矩阵平方。我们使用张量函数创建 2*2 矩阵。我们使用雅可比函数计算雅可比矩阵,使用函数lambda ele: matrix_square(ele)。
示例 5:计算 2D Numpy 数组矩阵的雅可比矩阵。
import torch import numpy as np array = np.array([[1.0, 2.0, 3.0],[4.0, 5.0, 6.0]]) mat = torch.tensor(array) jacobian = torch.autograd.functional.jacobian(lambda val: val.sum(), mat) print("Jacobian Matrix:") print(jacobian)
输出
Jacobian Matrix: tensor([[1., 1., 1.], [1., 1., 1.]], dtype=torch.float64)
解释
在上面的程序中,我们使用 torch.tensor 将 2D numpy 数组转换为 PyTorch 张量。我们使用来自 torch.autograd.function 的雅可比函数来计算雅可比矩阵。我们将 sum 函数和矩阵作为输入参数传递。
因此,我们看到了 PyTorch 中的雅可比矩阵是什么,以及如何在不同情况下计算雅可比矩阵值。我们使用各种程序计算雅可比值,并使用 PyTorch 创建矩阵。我们可以更改值和函数,并在机器学习任务的优化中使用雅可比矩阵。