【深度学习笔记2】线性代数

线性代数

简单操作
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中创建一个向量就是行向量,列向量直接看成矩阵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值