动手学深度学习v2学习笔记02:线性代数矩阵计算自动求导
Posted 鱼儿听雨眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手学深度学习v2学习笔记02:线性代数矩阵计算自动求导相关的知识,希望对你有一定的参考价值。
文章目录
一、线性代数实现
1.1 标量和向量
在pytorch中,我们使用一个元素的张量来表示标量。
我们可以将向量视为标量值组成的列表。
x = torch.tensor([3.0]) # 标量
y = torch.tensor([2.0, 1.0, 4.0]) # 向量
1.2 矩阵和多维张量
我们可以通过制定两个分量m和n来创建一个形状为
m
×
n
m \\times n
m×n的矩阵。并且,通过T
运算,我们可以对矩阵进行转置。
A = torch.arange(20).reshape(4, 5) # 矩阵
AT = A.T # 转置
对称矩阵B,等于其转置: B = B τ B = B^\\tau B=Bτ
就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。
X = torch.arange(24).reshape(2, 3, 4) # 三维张量
上例中X的内容为:
[
[
0
1
2
3
4
5
6
7
8
9
10
11
]
[
12
13
14
15
16
17
18
19
20
21
22
23
]
]
\\beginbmatrix \\beginbmatrix 0 & 1 & 2 & 3 \\\\ 4 & 5 & 6 & 7 \\\\ 8 & 9 & 10 & 11 \\endbmatrix \\beginbmatrix 12 & 13 & 14 & 15 \\\\ 16 & 17 & 18 & 19 \\\\ 20 & 21 & 22 & 23 \\endbmatrix \\endbmatrix
⎣
⎡⎣
⎡04815926103711⎦
⎤⎣
⎡121620131721141822151923⎦
⎤⎦
⎤
1.3 张量的运算
给定任意两个具有相同形状的张量,任何按元素二元运算的结果都将是相同形状的向量。
1.3.1 基础运算
加减乘除:下例中,A、B和C三个矩阵的形状相同。
A = torch.arange(20, dtype=torch.float32).reshape(4, 5)
B = A.clone() # 通过重新分配内存,将A的一个副本分配给B
C = A + B
哈达玛积:两个矩阵的按元素乘法称为哈达玛积(数学符号 ⨀ \\bigodot ⨀)
A = torch.arange(20, dtype=torch.float32).reshape(4, 5)
B = A.clone()
C = A * B # 哈达玛积
上例和视为如下运算:
[
0.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
]
⨀
[
0.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
]
=
[
0.
1.
4.
9.
16.
25.
36.
49.
64.
81.
100.
121.
144.
169.
196.
225.
256.
289.
324.
361.
]
\\beginbmatrix 0. & 1. & 2. & 3. \\\\ 4. & 5. & 6. & 7. \\\\ 8. & 9. & 10. & 11. \\\\ 12. & 13. & 14. & 15. \\\\ 16. & 17. & 18. & 19. \\endbmatrix \\bigodot \\beginbmatrix 0. & 1. & 2. & 3. \\\\ 4. & 5. & 6. & 7. \\\\ 8. & 9. & 10. & 11. \\\\ 12. & 13. & 14. & 15. \\\\ 16. & 17. & 18. & 19. \\endbmatrix = \\beginbmatrix 0. & 1. & 4. & 9. \\\\ 16. & 25. & 36. & 49. \\\\ 64. & 81. & 100. & 121. \\\\ 144. & 169. & 196. & 225. \\\\ 256. & 289. & 324. & 361. \\endbmatrix
⎣
⎡0.4.8.12.16.1.5.9.13.17.2.6.10.14.18.3.7.11.15.19.⎦
⎤⨀⎣
⎡0.4.8.12.16.1.5.9.13.17.2.6.10.14.18.3.7.11.15.19.⎦
⎤=⎣
⎡0.16.64.144.256.1.25.81.169.289.4.36.100.196.324.9.49.121.225.361.⎦
⎤
与标量的运算
a = 2
X = torch.arange(24).reshape(2, 3, 4)
Y = a + X
1.3.2 按特定轴运算
运算 | 方法 | 保持维度不变 |
---|---|---|
按特定轴求和 | sum(axis=n) | sum(axis=n, keepdims=True) |
按特定轴求均值 | mean(axis=n) | mean(axis=n, keepdims=True) |
按特定轴累加 | cumsum(axis=n) | cumsum(axis=n, keepdims=True) |
按特定轴求和:我们可以使用sum()
方法,计算其所有元素的和。也可以通过指定axis
参数来对张量的部分维度求和。
A = torch.arange(40, dtype=torch.float32).reshape(2, 5, 4)
A_sum_axis0 = A.sum(axis=0)
上例中,我们创建了一个形状为
2
×
5
×
4
2\\times5\\times4
2×5×4的三维张量A,并通过 以上是关于动手学深度学习v2学习笔记02:线性代数矩阵计算自动求导的主要内容,如果未能解决你的问题,请参考以下文章sum(axis=0)
方法对其第一维度进行求和。
[
[
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
]
]
⟶
[