【研究生随笔】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范数是类似的。
    ###########################################################################
    (待续)
相关推荐
Godspeed Zhao6 小时前
从零开始学AI24——无监督学习之K均值
学习·机器学习
郝学胜-神的一滴6 小时前
AI 编程智能体 27:吃透MCP通信机制
人工智能·python·langchain·wpf·numpy·scikit-learn
天天被压力6 小时前
【A股分钟级高频数据完全手册 #09】A股历史分时交易数据接口:普通分时怎么批量下
java·人工智能·python
天天被压力6 小时前
【A股分钟级高频数据完全手册 #10】股票实时行情数据接口Python:公开源实时交易取数
java·人工智能·python
特立独行的猫A16 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
cpolar技术支持16 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
云和数据.ChenGuang17 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
会飞锦鲤17 小时前
工业AI视觉检测项目完整实施方案
人工智能·深度学习·视觉检测·缺陷检测·模型训练·ai项目·工业应用
天诰18 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
电科_银尘18 小时前
【深度学习项目实战·15】小样本图像分类:迁移学习识别蚂蚁与蜜蜂
深度学习·分类·迁移学习