在本次学习前已在电脑安装过Anaconda,由于条件所限暂不考虑使用GPU的情况,根据李沐老师书上的安装步骤进行尝试,并作如下记录。
1.在Navigator界面,尝试创建d2l环境,并在base和d2l环境下安装了pytorch(咱也不知道这步是不是多余)。
2.根据书上的安装步骤进行torch和d2l包的安装,期间出现一些因网络连接错误造成的失败情况,重新安装后得到解决。
3.使用书中的代码进行D2L notebook的下载,成功!然后激活d2l环境,安装d2l和torch包(花费了太多时间)。
conda activate d2l
pip install d2l torch torchvision
4.最后进入Jugyter notebook是这样的。
存一个退出d2l环境的代码
conda deactivate
(1)若张量 X ∈ R n 1 × ⋯ × n d \mathcal{X}\in\mathbb{R}^{n_1\times\cdots\times n_d} X∈Rn1×⋯×nd在代码中用x表示,那么,x.shape将会输出 ( n 1 , … , n d ) (n_1,\dots,n_d) (n1,…,nd),x.numel()将输出 N : = ∏ i = 1 d n i N:=\prod^{d}_{i=1}n_i N:=∏i=1dni,len(x)将输出 n 1 n_1 n1.
(2)torch张量与Numpy数组的转化
A = X.numpy()
B = torch.tensor(A)
(1)数值型变量,序列均值填补缺失值
x = x.fillna(x.mean())
(2)离散型或分类变量,将“Nan”视为一个类别,进行0-1变量转化
x = pd.get_dummies(x, dummy_na=True)
(1)非降维求和
A.sum(axis=1, keepdims=True)
(2)张量的Frobenius范数
∥ X ∥ F = ∑ i 1 = 1 n 1 ⋯ ∑ i d = 1 n d x i 1 ⋯ i d 2 \|\mathcal{X}\|_F=\sqrt{\sum_{i_1=1}^{n_1}\cdots\sum_{i_d=1}^{n_d}x_{i_1\cdots i_d}^2} ∥X∥F=i1=1∑n1⋯id=1∑ndxi1⋯id2
torch.norm(torch.ones((2, 4, 8)))
(3)形状为(2, 3, 4)的张量,在轴0、1、2上的求和输出
T = torch.ones(2,3,4)
T.sum(axis=0), T.sum(axis=1), T.sum(axis=2)
(1)绘制函数 g ( y ) = y 3 − 1 y g(y)=y^3-\frac{1}{y} g(y)=y3−y1和其在 y = 1 y=1 y=1处切线的图像。
def g(y):
return y**3-1/y
y = np.arange(0, 3, 0.1)
plot(y, [g(y), 4*y-4], 'y', 'g(y)', legend=['g(y)', 'Tangent line (y=1)'])
(2)函数 f ( x ) = 3 x 1 2 + 5 e x 2 f(\mathbf{x})=3x_1^2+5e^{x_2} f(x)=3x12+5ex2, g ( x ) = ∥ x ∥ 2 g(\mathbf{x})=\|\mathbf{x}\|_2 g(x)=∥x∥2的梯度
g r a d f ( x ) = [ ∂ f ∂ x 1 , ∂ f ∂ x 2 ] = [ 6 x 1 , 5 e x 2 ] g r a d g ( x ) = 2 x gradf(\mathbf{x})=\left[\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}\right]=\left[6x_1, 5e^{x_2}\right]\\ gradg(\mathbf{x})=2\mathbf{x} gradf(x)=[∂x1∂f,∂x2∂f]=[6x1,5ex2]gradg(x)=2x
(3)函数 u = f ( x , y , z ) u=f(x,y,z) u=f(x,y,z)的链式法则,其中 x = ( a , b ) , y = ( a , b ) , z = ( a , b ) x=(a,b), y=(a,b), z=(a,b) x=(a,b),y=(a,b),z=(a,b).
d u d a = ∂ f ∂ x d x d a + ∂ f ∂ y d y d a + ∂ f ∂ z d z d a d u d b = ∂ f ∂ x d x d b + ∂ f ∂ y d y d b + ∂ f ∂ z d z d b \frac{du}{da}=\frac{\partial f}{\partial x}\frac{d x}{da}+\frac{\partial f}{\partial y}\frac{d y}{da}+\frac{\partial f}{\partial z}\frac{d z}{da}\\ \frac{du}{db}=\frac{\partial f}{\partial x}\frac{d x}{db}+\frac{\partial f}{\partial y}\frac{d y}{db}+\frac{\partial f}{\partial z}\frac{d z}{db} dadu=∂x∂fdadx+∂y∂fdady+∂z∂fdadzdbdu=∂x∂fdbdx+∂y∂fdbdy+∂z∂fdbdz
(1)反向传播计算y对x每个分量的梯度
y.backward() #标量
y.sum().backward() #非标量
x.grad
https://zh-v2.d2l.ai/index.html