线性代数
简单操作
c = a + b where ci = ai + bi 向量相加即对应元素相加
c = α ·b where ci = αbi 此处α是个标量
c = sina where ci = sin ai
长度
向量的长度即 其每个元素的平方求和再开根号
||a|| ≥ 0 for all a
||a + b|| ≤ ||a|| + ||b||
||α·b|| = |α| ·||b||
向量点乘 其中aT表示a向量的转置即行向量,向量一般默认列向量
向量正交
矩阵
·简单操作:A和B都是矩阵
乘法:矩阵乘以向量
乘法:矩阵x矩阵:得到的矩阵的行数是第一个矩阵的行数,列数是第二个矩阵的列数
矩阵范数
若向量c等于向量A乘向量b,那么c的范数小于等于b的范数(取决于如何衡量b和c的长度)
对于A的矩阵范数:最小的满足这个公式的值
Frobenius范数:就相当于把这个矩阵拉成一个长向量,然后求它的范数(或者说是模)
特征向量和特征值
不被矩阵改变方向的向量即特征向量
对称矩阵总是可以找到特征向量
矩阵转置:A.T
对称矩阵,A=AT
其中,列是最后一维即4,行是倒数第二维即3,宽是第一维即2,CHW排列
X =torch.arange(24).reshape(2,3,4)
X
给定具有相同形状的任何两个张量,任何按元素二元运算的结果都是相同形状的张量
注意:B = A是给了一个索引,如果改变B也会改变A
但是B = A.clone是新开了个内存,改变B不会改变A
A = torch.arange(20, dtype=torch.float32).reshape(5,4)
B = A.clone()#通过分配新内存,将A的一个副本分配给B
A, A + B
两个矩阵的按元素乘法称为 哈达玛积(Hadamard product)(数学符号的⊙)
A*B
计算其元素的和,是一个标量,可以求任意形状张量的元素和
x.sum
指定维度求和
A = torch.arange(20*2).reshape(2,5,4)
A,A.shape, A.sum()
axis=0,表示对第一个维度求和,第一个维度是C,(把C这个维度加没了)
A_sum_axis0 = A.sum(axis=0)
A_sum_axis0, A_sum_axis0.shape
axis=1表示对第二维度求和,就是对H这个维度
A_sum_axis1 = A.sum(axis=1)
A_sum_axis1, A_sum_axis1.shape
对2个维度进行求和
A.sum(axis=[0,1])
对3个维度进行求和
A.sum(axis=[0,1,2])
求均值
这两种都可以求均值,但是用A.mean()时注意A必须是float类型,否则会报错,好像是说结果无法输出整数(均值有时候不一定是整数)
A.mean()
A.sum() / A.numel()
对某个维度求均值
A.mean(axis=0)
A.sum(axis=0) / A.shape[0]
计算总和或者均值的时候保持轴数不变:keepdim=True,这样对应维度值变为1,比如下列代码,就是(1,5,4)
这样可以通过广播机制将A除以sum_A
(广播机制要求A和sum_A维度一样)
sum_A = A.sum(axis=0,keepdim=True)
sum_A
对某个维度做累加求和A.cumsum,这种情况该维度不会消失
A.cumsum(axis=1)
点积:相同位置按元素相乘再求和,是一个标量
x = torch.arange(4, dtype=torch.float32)
y = torch.ones(4, dtype=torch.float32)
x,y,torch.dot(x,y)
相当于 按元素乘法再求和
torch.sum(x * y)
矩阵向量积:Ax,使用**torch.mv()**来实现
矩阵:Matrix 向量:Vector
A = torch.arange(20, dtype=torch.float32).reshape(5,4)
A
A.shape,x.shape,torch.mv(A,x)
矩阵矩阵乘法
B = torch.ones(4,3)
torch.mm(A,B)
L2范数是向量元素平方和的平方根:
用**torch.norm()**求范数
u = torch.tensor([3.0,-4.0])
torch.norm(u)
L1范数是向量每个元素的绝对值之和:
torch.abs(u).sum()
矩阵的Frobenius norm范数是矩阵元素的平方和的平方根
因为它计算简单、是最常用的一个范数,所以直接用torch.norm就可以得到矩阵的F范数
torch.norm(torch.ones((4,9)))
torch中创建一个向量就是行向量,列向量直接看成矩阵