课程代码对应Judpyter笔记本中的位置:d2l-zh/pytorch/chapter_preliminaries/linear-algebra.ipynb
练习:
- 证明一个矩阵퐀的转置的转置是퐀:(퐀⊤)⊤=퐀。
A = torch.arange(6).reshape(2,3) A.T.T==A tensor([[True, True, True], [True, True, True]])
- 出两个矩阵퐀和퐁,显示转置的和等于和的转置:퐀⊤+퐁⊤=(퐀+퐁)⊤。
A = torch.arange(6).reshape(2,3) B = torch.ones(6).reshape(2,3) A.T+B.T==(A+B).T tensor([[True, True], [True, True], [True, True]])
- 给定任意方矩阵퐀,퐀+퐀⊤总是对称的吗?为什么?
A = torch.arange(9).reshape(3,3) (A+A.T).T==A+A.Ttensor([[True, True], [True, True], [True, True]])
(A+A.T).T=A.T+(A.T).T=A.T+A
- 我们在本节中定义了形状(2,3,4)的张量X。len(X)的输出结果是什么?
- 对于任意形状的张量X,len(X)是否总是对应于X特定轴的长度?这个轴是什么?
X = torch.arange(24).reshape(4,3,2) Y = torch.arange(24).reshape(2,3,4) Z = torch.arange(24).reshape(3,2,4) Q =torch.arange(12).reshape(3,4) T =torch.arange(12).reshape(1,2,3,2) len(X),len(Y),len(Z),len(Q),len(T) (4, 2, 3, 3, 1)
看上去是的,都是第0轴。
- 运行A/A.sum(axis=1),看看会发生什么。你能分析原因吗?
A = torch.arange(12, dtype=torch.float32).reshape(3,4) A/A.sum(axis=1) RuntimeError Traceback (most recent call last)in 1 A = torch.arange(12, dtype=torch.float32).reshape(3,4) 2 ----> 3 A/A.sum(axis=1) RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 1
A.sum(axis=1)把列降维,结果为tensor([ 6., 22., 38.]),不能和列数为4的矩阵进行运算(方阵时候可以)
- 当你在曼哈顿的两点之间旅行时,你需要在坐标上走多远,也就是说,就大街和街道而言?你能斜着走吗?
首先去不了曼哈顿。街道中两点坐标距离不能斜着走,走的是一范数吧
- 考虑一个具有形状(2,3,4)的张量,在轴0,1,2上的求和输出是什么形状?
A = torch.arange(24).reshape(2,3,4) A_sum_axis0 = A.sum(axis=0) A_sum_axis1 = A.sum(axis=1) A_sum_axis2 = A.sum(axis=2) A,A_sum_axis0,A_sum_axis1,A_sum_axis2 (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]]]), tensor([[12, 14, 16, 18], [20, 22, 24, 26], [28, 30, 32, 34]]), tensor([[12, 15, 18, 21], [48, 51, 54, 57]]), tensor([[ 6, 22, 38], [54, 70, 86]]))
- 向linalg.norm函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?
A = torch.arange(6, dtype=torch.float32).reshape(1,2,3) B = torch.arange(12, dtype=torch.float32).reshape(1,2,3,2) torch.linalg.norm(A),torch.linalg.norm(B) (tensor(7.4162), tensor(22.4944))
得到的是矩阵的弗罗贝尼乌斯范数(Frobenius norm),即矩阵元素平方和的平方根
linalg.norm函数求范数参考链接:numpy.linalg.norm(求范数) - 理想几岁 - 博客园
P3 按特定轴求和默认情况下,调用求和函数会沿所有的轴降低张量的维度,使它变为一个标量。 我们还可以[指定张量沿哪一个轴来通过求和降低维度]。以矩阵为例,为了通过求和所有行的元素来降维(轴0),我们可以在调用函数时指定axis=0。 由于输入矩阵沿0轴降维以生成输出向量,因此输入的轴0的维数在输出形状中丢失。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)