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([]))
相关推荐
xsd2024111812 小时前
从自主导航到视觉读表:一台工业巡检机器人的全栈技术链路拆解
人工智能
小雪崩12 小时前
嵌入式学习 day64:字符设备驱动
学习
袁哥大话安全12 小时前
巡隐WEBSHELL扫描软件
人工智能·安全·web
深圳老胡12 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
个 人 练 习 生12 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
论文复现现场12 小时前
8卡4090能跑70B吗?Llama-2显存预算、QLoRA与通信瓶颈
人工智能·深度学习·分布式训练·llama·显存·qlora·算家云
酷虎软件12 小时前
如何用AI创作AI歌曲AI音乐
人工智能
小宋102112 小时前
A2UI从零实战:Agent安全生成交互界面与事件回传
javascript·人工智能·安全·交互
坤坤子吖12 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
罗小罗同学12 小时前
谷歌团队在Nat Med最新发表的医学多模态模型,4B参数的模型性能逼近671B的DeepSeek
人工智能·医学图像处理·医工交叉·医学ai