动手学深度学习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,并通过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. ] ] ⟶ [

以上是关于动手学深度学习v2学习笔记02:线性代数矩阵计算自动求导的主要内容,如果未能解决你的问题,请参考以下文章

3.1 线性回归 解析解动手学深度学习 v2

线性回归 + 基础优化算法 动手学深度学习v2 pytorch

动手学深度学习v2 课程笔记 — 深度学习基础

动手学深度学习v2 课程笔记 — 深度学习基础

模型选择 + 过拟合和欠拟合(动手学深度学习v2)笔记

动手学深度学习 v2 PDF版本