PyTorch学习笔记|张量的线性代数运算

PyTorch中并未设置单独的矩阵对象类型,因此PyTorch中,二维张量就相当于矩阵对象,并且拥有一系列线性代数相关函数和方法。

矩阵的形变及特殊矩阵构造方法

go 复制代码
t1 = torch.arange(1, 7).reshape(2, 3).float()
torch.t(t1)

t = torch.arange(4)
torch.diag(t)

torch.triu(t1)
torch.tril(t1)

矩阵的基本运算

dot只能作用于一维张量。

go 复制代码
t = torch.arange(1, 4)
torch.dot(t,t)

t1 = torch.arange(1,7).reshape(2,3)
t2 = torch.arange(1,10).reshape(3,3)
torch.mm(t1, t2)

t3 = torch.arange(1,13).reshape(3,2,2)
t4 = torch.arange(1,19).reshape(3,2,3)
torch.bmm(t3, t4)

torch.addmm(t, t1, t2)

矩阵的线性代数运算

矩阵的迹运算比较简单,就是矩阵对角线元素之和。

go 复制代码
A = torch.tensor([[1., 2],[4, 5]])
torch.trace(A)

#
tensor(6.)

矩阵的秩(rank),是指矩阵中行或列的极大线性无关数,且矩阵中行、列极大无关数总是相同的,任何矩阵的秩都是唯一值,满秩指的是方阵(行数和列数相同的矩阵)中行数、列数和秩相同,满秩矩阵有线性唯一解等重要特性,而其他矩阵也能通过求解秩来降维,同时,秩也是奇异值分解等运算中涉及到的重要概念。

go 复制代码
torch.linalg.matrix_rank(A)
# tensor(2)

行列式其实就是一个数,通过行列式的计算,我们能够知道矩阵是否可逆,从而可以进一步求解矩阵所对应的线性方程。

go 复制代码
torch.det(A)
# tensor(-3.)

矩阵求逆矩阵我们用一个简单的线性回归来讲解,点(1,2)和点(3,4),我们用一条线来拟合,其实就是求这个方程y=ax+b。

我们来看看矩阵怎么表达上面这个形式。

因此我们可以通过求逆矩阵来计算x。

我们来看一下代码。

go 复制代码
A = torch.tensor([[1.0,1],[3,1]])
B = torch.tensor([2.0,4])
torch.mv(torch.inverse(A), B)

# result
tensor([1., 1.])

所以结果就是y = x+1

当然也可以使用最小二乘法直接算出来。

go 复制代码
torch.linalg.lstsq(A, B.reshape(2,1))
# result
torch.return_types.linalg_lstsq(
solution=tensor([[1.0000],
        [1.0000]]),
residuals=tensor([]),
rank=tensor(2),
singular_values=tensor([]))
相关推荐
海宇大数据3 小时前
零信任架构实战:基于海宇全能小微企业报告构建自动化持牌网络小贷小微商户极速助业贷秒级全维风险决策网关
网络·人工智能·架构·自动化
hkNaruto3 小时前
【AI】基于大模型的AI游戏地图生成、控制方案:AI Native Game Harness 迁移操作手册
前端·人工智能·游戏
IT_陈寒3 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
ZhengEnCi3 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
vilya3 小时前
Agent 语音引擎换心记:从「够用」到「稳且好」
人工智能·agent
王中阳Go3 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
70后写java的老码农4 小时前
Ollama 大模型私有化部署与彻底卸载指南(Windows/Linux)
人工智能
清如许.4 小时前
如何评估 AI 智能体(AI Agent)?指标、方法与最佳实践
人工智能
猪八宅百炼成仙4 小时前
让 AI 帮你清理电脑而不翻车:一个 Windows 体检调优 Skill 的工程化设计
人工智能·windows
宋艳_AI应用开发4 小时前
五个阶段跑完,它交了一份日期错两年的投资报告——深思熟虑的Agent最危险的地方,是想得太像
人工智能