3、线性代数

1、矩阵转置 A[i,j]=A[j,i]

2、对称矩阵 :A转置=A

0,2,3

2 1 5

3,5,1

3、三维矩阵 求和 axis=0 两个矩阵相加 axis=1 两个向量相加 ,axis=2 向量内部相加

keepdims=True 求和后维度保持不变

4、cumsum累加求和

5、torch.mm() 或 torch.bmm()【矩阵乘法,前二维后三维,均不可广播】

torch.mm() 用于两个二维向量之间的矩阵乘法。如果 input1 是一个n×m张量,input2 是一个 m×p张量,将会输出一个 n×p 张量

>>> a = torch.ones(3,4)

>>> b = torch.ones(4,2)

>>> torch.mm(a, b) # torch.Size([3, 2])

tensor([[4., 4.],

4., 4.\], \[4., 4.\]\]) 而 torch.bmm() 是用于两个三维张量之间的批次矩阵乘法(其中第0维为批次大小)。由于神经网络训练一般采用mini-batch,经常输入的是三维带batch矩阵。如果 input1 是一个 b×n×m 张量,input2 是一个 b×m×p 张量,将会输出一个 b×n×p 张量 \>\>\> a = torch.ones(3,4,5) \>\>\> b = torch.ones(3,5,6) \>\>\> torch.bmm(a, b) # torch.Size(\[3, 4, 6\]) tensor(\[\[\[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\]\], \[\[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\]\], \[\[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\], \[5., 5., 5., 5., 5., 5.\]\]\]) 另外,这两个函数都无法广播 **6、torch.mv()【矩阵-向量乘法,不可广播】** torch.mv(input, vec) 只支持矩阵和向量之间的乘法。如果 input 为 n×m,vec向量的长度为m,那么输出为 n×1的向量。不支持广播机制 In\[1\]: vec = torch.arange(4) In\[2\]: mat = torch.arange(12).reshape(3,4) In\[3\]: torch.mv(mat, vec) Out\[1\]: tensor(\[14, 38, 62\]) torch.dot()【仅支持两个一维向量点积】 只能支持两个一维向量,两向量相乘相加得到一个标量 与 np.dot() 不同,np.dot() 既能向量点积,又能矩阵乘法 a = torch.tensor(\[2,3\]) b = torch.tensor(\[1,2\]) c = torch.dot(a,b) print('a:',a.shape) # a: torch.Size(\[2\]) print('b:',b.shape) # b: torch.Size(\[2\]) print('torch.dot:',c,c.shape) # torch.dot: tensor(8) torch.Size(\[\]) **7、@【等价于 torch.dot() + torch.mv() + torch.mm()】** mat1 @ mat2 若mat1和mat2都是一维向量,那么对应操作就是torch.dot() 若mat1是二维向量,mat2是一维向量,那么对应操作就是torch.mv() 若mat1和mat2都是二维向量,那么对应操作就是torch.mm() vec1 = torch.arange(4) vec2 = torch.tensor(\[4,3,2,1\]) mat1 = torch.arange(12).reshape(4,3) mat2 = torch.arange(12).reshape(3,4) print(vec1 @ vec2) # 两个一维向量 print(mat2 @ vec1) # 一个二维和一个一维 print(mat1 @ mat2) # 两个二维向量 Output: tensor(10) tensor(\[14, 38, 62\]) tensor(\[\[ 20, 23, 26, 29\], \[ 56, 68, 80, 92\], \[ 92, 113, 134, 155\], \[128, 158, 188, 218\]\]) torch.matmul() 【矩阵乘法,可高维,可广播】 torch.matmul() 与 @ 类似,但它不止局限于一维和二维,可以扩展到高维,且可以广播 如果输入的两个张量都是一维的,那么返回点积,得到一个数,对应的操作就是torch.dot() 如果输入的两个张量都是二维的,那么返回矩阵乘积,对应的操作就是torch.mm() 如果输入的第一个张量是二维的,第二个张量是一维的,matrix第二维需要与 vector维度相同,返回矩阵向量乘积,对应的操作就是torch.mv() 8、L2 元素平方求和开根号 L1 元素绝对值求和

相关推荐
高洁0111 分钟前
CLIP 的双编码器架构是如何优化图文关联的?(3)
深度学习·算法·机器学习·transformer·知识图谱
清水白石00829 分钟前
解构异步编程的两种哲学:从 asyncio 到 Trio,理解 Nursery 的魔力
运维·服务器·数据库·python
山海青风33 分钟前
图像识别零基础实战入门 1 计算机如何“看”一张图片
图像处理·python
彼岸花开了吗1 小时前
构建AI智能体:八十、SVD知识整理与降维:从数据混沌到语义秩序的智能转换
人工智能·python·llm
山土成旧客1 小时前
【Python学习打卡-Day40】从“能跑就行”到“工程标准”:PyTorch训练与测试的规范化写法
pytorch·python·学习
闲人编程1 小时前
消息通知系统实现:构建高可用、可扩展的企业级通知服务
java·服务器·网络·python·消息队列·异步处理·分发器
大神君Bob2 小时前
【AI办公自动化】如何使用Pytho让Excel表格处理自动化
python
Heorine2 小时前
数学建模 绘图 图表 可视化(6)
python·数学建模·数据可视化
栈与堆2 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
scott1985122 小时前
NVIDIA GPU内部结构:高性能矩阵乘法内核剖析
线性代数·矩阵·gpu·nvidia·cuda