pytorch线性代数的基本操作
线性代数的基本操作
标量由只有一个元素的张量表示
1 | import torch |
向量视为标量值的组成 通过张量的索引来访问任一元素
1 | x=torch.arange(4) |
对称矩阵 A=AT
1 | B=torch.tensor([[1,2,3],[2,0,5],[3,5,5]]) |
给定具有相同形状的任何两个张量,任何按元素二元运算的结果都将是相同形状的张量
1 | A=torch.arange(20,dtype=torch.float32).reshape(5,4) |
两个矩阵的按元素乘法称为哈达玛积,每个元素相乘
1 | A*B |
标量与向量的+ /*
1 | a=2 |
计算其元素的和
1 | x=torch.arange(4,dtype=torch.float32) |
计算任意形状张量的元素和
1 | A=torch.arange(20*2).reshape(2,5,4) |
指定求和汇总张量的轴
1 | A_sum_axis0=A.sum(axis=0) |
一个与求和相关的量是平均值
1 | A=torch.arange(20*2,dtype=torch.float32).reshape(2,5,4) |
一个与求和相关的量是平均值
1 | sum_A=A.sum(axis=1,keepdims=True) |
某个轴进行累加求和
1 | A,A.cumsum(axis=0) |
点积是相同位置的按元素乘积的和
1 | y=torch.ones(4,dtype=torch.float32) |
矩阵向量积Ax是一个长度为m的列向量,其ith元素是点积aix
1 | A=torch.arange(20).reshape(5,4) |
矩阵乘法AB 看作是简单地执行m次矩阵向量积,并将结果拼接在一起 Am x n/*Bn x p
1 | B=torch.arange(8).reshape(4,2) |
L2范数是向量元素平方和的平方根 就是向量的长度
1 | u=torch.tensor([3.0,-4.0]) |
L1范数是向量元素的绝对值之和
1 | torch.abs(u).sum() |
矩阵的弗罗贝尼乌斯范数 是矩阵元素的平方和的平方根
1 | torch.norm(torch.ones(4,9)) |
自动求导
假设我们对函数y=2xTx 关于列向量x求导
1 | import torch |
在我们计算y对x的梯度(求导)之前 我们需要来存储梯度
1 | x.requires_grad_(True) #等价于x=torch.arange(4.0,requires_grad=True) |
在计算另一个函数的时候 要清楚之前的值 pytorch会累积梯度
1 | #把所有梯度清零 |
深度学习中,我们的目的不是计算微分矩阵,而是批量中每个样本单独计算的偏导数之和
1 | x.grad.zero_() |
将某些计算移动到记录的计算图之外
1 | x.grad.zero_() |
即使构建函数的计算图需要通过Python控制流,我们仍然可以计算得到变量的梯度
1 | def f(a): |
作者声明
1 | 如有问题,欢迎指正! |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 jhj-coding!
评论