🎈动手学deep learning
☁️本专栏会定期更新关于动手学深度学习的每章知识点的讲解,题目答案
👻如果喜欢,欢迎点赞,收藏
动手学深度学习-预备知识篇
线性代数篇
1-3题讲解
- 证明一个矩阵 A \mathbf{A} A的转置的转置是 A \mathbf{A} A,即 ( A ⊤ ) ⊤ = A (\mathbf{A}^\top)^\top = \mathbf{A} (A⊤)⊤=A。
import torch as tc
A = torch.arange(24,dtype = torch.float32).reshape(4,-1)
print(1,A),print(1,(A.T).T)
- 运行结果
2. 给出两个矩阵 A \mathbf{A} A和 B \mathbf{B} B,证明“它们转置的和”等于“它们和的转置”,即 A ⊤ + B ⊤ = ( A + B ) ⊤ \mathbf{A}^\top + \mathbf{B}^\top = (\mathbf{A} + \mathbf{B})^\top A⊤+B⊤=(A+B)⊤。
# 2.证明两个矩阵的转置的和等于矩阵和的转置
A1 = torch.arange(24,dtype = torch.float32).reshape(4,-1)+2
print(A.T+A1.T),print((A+A1).T)
- 运行结果
3. 给定任意方阵 A \mathbf{A} A, A + A ⊤ \mathbf{A} + \mathbf{A}^\top A+A⊤总是对称的吗?为什么?
# 3.对于任意给定的*方*阵A,总是有A+A.T是对称矩阵???
Z = torch.arange(16,dtype = torch.float32).reshape(4,-1)
print(3,Z+Z.T),print(3,(Z+Z.T).T)
Y = torch.tensor(([4,2,3,4],[42,12,56,88],[74,32,12,44],[9,93,32,12]))
print((Y+Y.T)),print((Y+Y.T).T)
- 运行结果
4-9题讲解
- 本节中定义了形状 ( 2 , 3 , 4 ) (2,3,4) (2,3,4)的张量
X
。len(X)
的输出结果是什么?
# 4.X = torch.arange(24,dtype = torch.float32).reshape(2,3,4),求len(X)
X = torch.arange(24,dtype = torch.float32).reshape(2,3,4)
print(len(X),len(X[1]),print(X))
- 运行结果
5. 对于任意形状的张量X
,len(X)
是否总是对应于X
特定轴的长度?这个轴是什么?
# 5.给定一个任意的张量,要指出len(X)是对应的那个轴的长度,这个轴是什么
X1 = tc.ones(24).reshape(6,-1) #轴度为2
print(len(X1))
X2 = tc.arange(24).reshape(4,2,-1) #轴度为3
print(len(X2))
W = tc.zeros(30) #轴度为1
print(len(W))
- 运行结果
6. 运行A/A.sum(axis=1)
,看看会发生什么。请分析一下原因?
- 更改之后,不能再除
- 考虑一个具有形状 ( 2 , 3 , 4 ) (2,3,4) (2,3,4)的张量,在轴0、1、2上的求和输出是什么形状?
print(X.sum(axis = 0)),print(X.sum(axis = 1)),print(X.sum(axis = 2))
- 运行结果
- 为
linalg.norm
函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?
# 8.为linalg.norm函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?
from math import sqrt
W1 = tc.arange(1024,dtype = torch.float32).reshape(1,2,2,256)
print(tc.norm(W1))
W2 = tc.arange(36,dtype = torch.float32).reshape(6,6)
print(tc.norm(W2) == sqrt((W2*W2).sum(axis = [0,1])))
print(sum(sum(W2*W2)))
print((W2*W2).sum(axis = [0,1]))
- 运行结果
下篇预备知识:
1.微分学实现绘画切线
2.详解微分函数实现过程