【研究生随笔】Pytorch中的线性代数

  • 在许多科研项目中,都会涉及到大量的数学公式的转换和计算,包括求导、微积分等。在pytorch中的autograd可以自动计算微分。
  • 创建矩阵或者向量时,若元素值都一样的话,可以使用torch.zeros( , , )来实现(案例为全零)。
  • Torch.exp(X):表示eX 其中X貌似为tensor类型(张量)。
  • Torch.cat(X,Y,dim)表示将两个张量按一定规则进行连接:
python 复制代码
X = torch.arange(12, dtype=torch.float32).reshape((3, 4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)

其中,dim = 0为Y轴连接,dim = 1为X轴连接。

  • 假设,A = tensor(\[0, 1, 2]) B = tensor(\[0 ,1])
    在张量计算过程中,A和B虽然shape不同,但也是可以相加的,他们会按照彼此所希望的样子各自对自己做出改变,一起组合成更加强大的"我们"。如下:
    A会变成A = tensor(\[0,0, 1,1, 2,2]),B会变成B = tensor(\[0 ,1, 0 ,1, 0 ,1])
    从而两者组合为A + B = tensor(\[0, 1, 1, 2, 2, 3])

###############################################################################

标题对元素的索引或其他操作与数组类似

  • 矩阵或向量的转置:A.T即可(注意对称阵等特殊矩阵)
  • 图像以n维数组形式出现,其中3个轴对应于⾼度、宽度,以及⼀个通道(channel)轴,⽤于堆叠颜⾊通道(红⾊、绿⾊和蓝⾊)。

标题张量的降维

在数学中,要对矩阵中的元素进行求和,需要使用到∑,代码里可以直接用求和函数sum():

python 复制代码
X = torch. Tensor([[1,2,3],[1,2,3]])
Xsum = X.sum()

调用求和函数其实是对张量进行降维成一个一维标量来进行求和,还可以在sum()中添加函数来指定需要按哪个轴来进行降维(axis = 0为Y轴,axis = 1为X轴)。

是不是可以用来计算各行或者各列上的总和呢?

当添加参数后,sum(axis = 0)所输出的便不再是一个总和值,而是一个降维后的标量。

是不是不太好理解,就比方说:A = \[1,2,3, 1,2,3]:

当对A.sum(axis = 1)时,其输出变为\[6,6];而当对A.sum(axis = 0)时,其输出变为\[2,4,6]。

还可以这样:A.sum(axis = 0,1) ---------- 意思是沿着行和列对矩阵元素进行求和,最后得出的效果与A.sum()相同(就是普通求和)

如果不想进行降维求和,那就可以使用cumsum()函数,具体如下:

python 复制代码
import torch as torch
A torch.tensor(
[1,2,3],
[1,2,3],
[1,2,3]]
print("original A is ",[A})
print("chuange to e is:",[A.sum(axis 0)})
print("chuange to 1 is:"[A.sum(axis 1)))
print("cumsum e is:",[A.cumsum(axis e)))
print("cumsum 1 is:",{A.cumsum(axis 1)})

输出如下:

powershell 复制代码
original A is {tensor([[1,2,3],
[1,2,3],
[1,2,3])}
chuange to e is:{tensor([3,6,9])}
chuange to 1 is:{tensor([6,6,6])}
cumsum e is:{tensor([[1,2,3],
[2,4,6],
[3,6,9]])}
cumsum
1is:{tensor([1,3,6],
[1,3,6]
[1,3,6]])

计算元素的平均值也有函数可以调用:A.mean() 其效果同:A.sum() / A.numel()。该函数跟sum()一样,可以加参数实现不同轴的降维。也就是说,可以通过axis参数的控制,实现对各行各列的平均值计算。

  • 点积(A的转置乘以B)torch.dot(A,B),按照点积的定义,也可以使用这个来实现:sum(A * B)(先相乘后求和),其中A * B又叫A和B的哈达玛积(元素之间的乘法)。
  • • 向量积(矩阵与向量之积,注意矩阵和向量形状的约束)可以使⽤向量积来描述在给定前⼀层的值时,求解神经⽹络每⼀层所需的复杂计算。Torch.mv(A,x)
  • • 矩阵乘法(前行乘后列):有点想法,每一次都是进行的行乘列,然后相乘元素求和,那么就可以转换成一个递归问题,通过向量积和求和来完成每一个子问题的过程。Torch.mm(A , B)
  • 范数:
    L2范数是向量元素平方和的平方根:Torch.norm(A) 。 在实际应用中,更多的是使用到L2范数的平方,那就再自乘一下就好了。
    L1范数是向量元素绝对值之和:torch.abs(A).sum()。
    对于矩阵的范数叫做弗罗⻉尼乌斯范数,跟L2范数是类似的。
    ###########################################################################
    (待续)
相关推荐
nanawinona22 分钟前
2026年AI量化学习,交易认知和技术实现要一起走
人工智能·python
Csvn1 小时前
Python 开发技巧 · 生成器(Generator)进阶 —— 从 yield 到 yield from,写出省内存的生产者-消费者模式
后端·python
GEO_ai_zhijian1 小时前
口碑好的工业GEO优秀企业
python·搜索引擎
三品吉他手会点灯1 小时前
嵌入式机器学习 - 学习笔记1.0.2 - 学习路线导览:从机器学习基础到 TinyML应用
人工智能·笔记·嵌入式硬件·学习·机器学习
mikejahn1 小时前
解析ISO网站单个标准的静态网址
python
hai3152475432 小时前
九章编译法----空间几何统一编译法
网络·汇编·人工智能·线性代数
Java面试题总结3 小时前
Python 开发技巧 · 高级装饰器 —— 从基础到工业级实战
开发语言·python
纸小铭3 小时前
[MAF预定义ChatClient中间件-01]LoggingChatClient——在调用LLM前后输出日志
python·中间件·flask
aiqianji3 小时前
有哪些支持长文的AI生成短篇小说软件?
人工智能·python
lisw053 小时前
人-智能体协同的信任研究!
人工智能·机器学习·软件工程