动手学深度学习(pytorch)学习记录3-线性代数[学习记录]

注:本代码在jupyter notebook上运行
封面图片来源

1 标量

import torch

x = torch.tensor(3.0)
y = torch.tensor(2.0)

x + y, x * y, x / y, x**y # 加 乘 除 指数运算

输出结果:
(tensor(5.), tensor(6.), tensor(1.5000), tensor(9.))

2 向量

x = torch.arange(4)
x

输出结果:
tensor([0, 1, 2, 3])

# 引用向量的元素
x[3]

输出结果:
tensor(3)

# 向量长度
len(x)

输出结果:
4

# 形状
x.shape

输出结果:
torch.Size([4])

3 矩阵

A = torch.arange(20).reshape(5, 4)
A

输出
在这里插入图片描述

# 访问矩阵的转置
A.T

输出
在这里插入图片描述
输出

# 对称阵的转置是其本身
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
B == B.T

输出
在这里插入图片描述

4 张量

# 张量是向量的推广,是描述具有任意数量轴的n维数组的方法
X = torch.randn(24).reshape(2, 3, 4)
X

输出
在这里插入图片描述

5 张量算法的基本性质

具有相同形状的张量,进行按元素二元运算的结果是相同形状的张量

A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone() # 通过分配新内存,将A的副本分配给B
A, A+B

输出
在这里插入图片描述

A * B

输出
在这里插入图片描述

# 张量与标量相乘或相加:张量的每个元素都与该标量相乘或相加
X = torch.arange(24).reshape(2, 3, 4)

a = 2.5
print()
print(X, '\n', a + X, '\n', a*X)

输出
在这里插入图片描述

6 降维

# 对任意张量计算其元素和
x = torch.arange(4, dtype=torch.float32)
x, x.sum()

输出
在这里插入图片描述

# 计算任意形状张量的元素和
A.shape, A.sum()

输出
在这里插入图片描述
默认情况下该求和函数会沿所有轴降低张量维度 我们也可以指定轴求和降维

# 指定axis=0
A_sum_axis0 = A.sum(axis = 0)
A_sum_axis0, A_sum_axis0.shape

输出
在这里插入图片描述

# 指定axis=1
A_sum_axis1 = A.sum(axis = 1)
A_sum_axis1, A_sum_axis1.shape

输出
在这里插入图片描述

# 沿着行和列求和,结果与A.sum()相同
A.sum(axis=[0, 1])

输出
在这里插入图片描述

# 求平均值的两种方法
A.mean(), A.sum()/A.numel() # 求平均值的函数,总和/元素个数

输出
在这里插入图片描述

# 亦可沿指定轴求平均值降维
A.mean(axis = 0), A.sum(axis = 0)/A.shape[0]

输出
在这里插入图片描述
非降维求和或求平均值,轴数保持不变

sum_A = A.sum(axis=1, keepdim=True)
print(sum_A)
print(sum_A.shape,A.shape)

输出
在这里插入图片描述

# 由于sum_A对每行求和后仍保持两个轴,可以通过广播机制将A除以sum_A
A / sum_A

在这里插入图片描述

# 沿某轴计算A的累积总和,可调用cumsum函数,该函数不会降低输入张量的维度
A, A.cumsum(axis=0) # 沿行累计求和,我们看第一列 
# 4=0+4
# 12=0+4+8
# 24=0+4+8+12
# 40=0+4+8+12+16

输出
在这里插入图片描述

7 点积

# 求点积的两种方法
y = torch.ones(4, dtype=torch.float32)
x, y, torch.dot(x, y) # 直接调用函数

输出
在这里插入图片描述

torch.sum(x * y)# 按元素乘法再求和

输出
在这里插入图片描述

8 矩阵-向量积

# A的列维数(沿轴1长度),必须与x的长度相同
A.shape,x.shape, torch.mv(A, x)

9 矩阵-矩阵乘法

# 不要和哈达玛积(矩阵按元素乘法)混淆
B = torch.ones(4,3)
torch.mm(A,B)

输出
在这里插入图片描述

10 范数

L1范数:向量元素的绝对值之和
L2范数:向量元素平方和的平方根

# 向量的L2范数(欧几里得距离)
u = torch.tensor([3.0, -4.0])
torch.norm(u) # 类似求直角三角形的斜边

输出
在这里插入图片描述

# 相较于L2范数, L1范数受异常值的影响较小
# 求解方法:绝对值函数+按元素求和
torch.abs(u).sum()

输出
在这里插入图片描述
L1和L2范数是更一般的Lp范数(向量绝对值的p次方和的p次方根)

弗罗贝尼乌兹范数:矩阵元素的平方和的平方根

torch.norm(torch.ones((4,9)))

输出
在这里插入图片描述
本人学习地址https://zh-v2.d2l.ai/
恳请大佬批评指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walfar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值