0基础动手学深度学习-李沐-ML-线性代数

向量(一阶张量)的范数就是向量的长度。

矩阵范数 :将一个矩阵映射成一个数字(也叫矩阵的长度)

要求:

​ 1.0矩阵的长度为0

​ 2.非零矩阵长度均大于0

​ 3.满足数乘运算,即 a ∣ ∣ A ∣ ∣ = ∣ ∣ a A ∣ ∣ a||A||=||aA|| a∣∣A∣∣=∣∣aA∣∣

​ 4.满足三角不等式,即 ∣ ∣ A + B ∣ ∣ ≤ ∣ ∣ A ∣ ∣ + ∣ ∣ B ∣ ∣ ||A+B||\le||A||+||B|| ∣∣A+B∣∣∣∣A∣∣+∣∣B∣∣,注意 A , B A,B AB是同型矩阵

​ 5.只对于方阵进行范数定义则需要满足相容性,即 ∣ ∣ A B ∣ ∣ ≤ ∣ ∣ A ∣ ∣ ∣ ∣ B ∣ ∣ ||AB||\le||A||||B|| ∣∣AB∣∣∣∣A∣∣∣∣B∣∣

范数定义方式:
弗罗贝尼乌斯范数 Frobenius Norm:

​ 矩阵元素平方和开根号,在Pytorch中直接使用torch.norm()函数就可以求得Frobenius范数

L1范数(针对于向量):

​ 每个元素的绝对值(求绝对值时要用到torch.abs()函数)求和

服从乘法范数:

​ 对于向量 c , b c,b cb和矩阵 A A A c = A b c=Ab c=Ab ∣ ∣ c ∣ ∣ ≤ ∣ ∣ A ∣ ∣ ∣ ∣ b ∣ ∣ ||c||\le||A||||b|| ∣∣c∣∣∣∣A∣∣∣∣b∣∣(表达式中的 ∣ ∣ A ∣ ∣ ||A|| ∣∣A∣∣是一个标量),将矩阵的范数定义为满足该式的最小 ∣ ∣ A ∣ ∣ ||A|| ∣∣A∣∣

哈达玛积 Hadamard Product:

​ 两个同型矩阵的哈达玛积为对应元素相乘(结果仍为一个矩阵)。

下文定义的X Tensor对应的三维图像(利于理解文中的sum()函数与cumsum()函数):请添加图片描述

指定求和汇总张量的轴(类中的sum()函数):

x = torch.arange(30).reshape((3, 2, 5))
print(x)
##########x的输出为################
tensor([[[ 0,  1,  2,  3,  4],
         [ 5,  6,  7,  8,  9]],

        [[10, 11, 12, 13, 14],
         [15, 16, 17, 18, 19]],

        [[20, 21, 22, 23, 24],
         [25, 26, 27, 28, 29]]])
##################################
# !!!!!!!!type1!!!!!!!!!!!
y = x.sum(axis = 0)
print(y.shape)
print(y)
# torch.Size([2, 5])
# tensor([[30, 33, 36, 39, 42],
#         [45, 48, 51, 54, 57]])
#!!!!!!!!!type2!!!!!!!!!!!
y = x.sum(axis=1)
print(y.shape)
print(y)
# torch.Size([3, 5])
# tensor([[ 5,  7,  9, 11, 13],
#         [25, 27, 29, 31, 33],
#         [45, 47, 49, 51, 53]])
#!!!!!!!!!type3!!!!!!!!!!!
y = x.sum(axis=2)
print(y.shape)
print(y)
# torch.Size([3, 2])
# tensor([[ 10,  35],
#         [ 60,  85],
#         [110, 135]])
# !!!!!!!type3!!!!!!!!!
y = x.sum(axis=[0, 1])
print(y.shape)
print(y)
# torch.Size([5])
# tensor([75, 81, 87, 93, 99])
理解:

sum的功能是将axis指向的维度压缩后舍弃,如果不想该维度被舍弃需要使用keepdims=True这个参数(默认值为False)

某个轴计算x元素的累积求和(类中的cumsum()函数)

x = torch.arange(30).reshape((3, 2, 5))
print(x)
##########x的输出为################
tensor([[[ 0,  1,  2,  3,  4],
         [ 5,  6,  7,  8,  9]],

        [[10, 11, 12, 13, 14],
         [15, 16, 17, 18, 19]],

        [[20, 21, 22, 23, 24],
         [25, 26, 27, 28, 29]]])
##################################
#!!!!!!type1!!!!!!!!!
y = x.cumsum(axis=0)
print(y.shape)
print(y)
# torch.Size([3, 2, 5])
# tensor([[[ 0,  1,  2,  3,  4],
#          [ 5,  6,  7,  8,  9]],
#
#         [[10, 12, 14, 16, 18],
#          [20, 22, 24, 26, 28]],
# 
#         [[30, 33, 36, 39, 42],
#          [45, 48, 51, 54, 57]]])
#!!!!!!type2!!!!!!!!
y = x.cumsum(axis=1)
print(y.shape)
print(y)
# torch.Size([3, 2, 5])
# tensor([[[ 0,  1,  2,  3,  4],
#          [ 5,  7,  9, 11, 13]],
# 
#         [[10, 11, 12, 13, 14],
#          [25, 27, 29, 31, 33]],

#         [[20, 21, 22, 23, 24],
#          [45, 47, 49, 51, 53]]])
# !!!!!!type3!!!!!!!!!!
y = x.cumsum(axis=2)
print(y.shape)
print(y)
# torch.Size([3, 2, 5])
# tensor([[[  0,   1,   3,   6,  10],
#          [  5,  11,  18,  26,  35]],
# 
#         [[ 10,  21,  33,  46,  60],
#          [ 15,  31,  48,  66,  85]],
# 
#         [[ 20,  41,  63,  86, 110],
#          [ 25,  51,  78, 106, 135]]])
理解:

面的话是从前往后依次累积求和,行的话是从上往下依次累积求和,列的话是从左往右依次累积求和,且维度与形状均不发生任何改变。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值