开学第3周 本周在常规课程学习的基础上 报名了六级考试 开始坚持每天背一点单词。完成了李沐深度学习5-8课时的学习 以下是我对部分作业题的代码编写和总结。
三、线性代数作业题 3.1.我们在本节中定义了形状 2,3,4 的张量X。len(X)的输出结果是什么 对于任意形状的张量X,len(X)是否总是对应于X特定轴的长度?这个轴是什么?import torch X torch.arange(24).reshape(2, 3, 4) len(X)
输出结果为2。因为len(X)的输出总是对应第0轴的长度。
3.2.运行A/A.sum(axis 1) 看看会发生什么。你能分析原因吗A torch.arange(20).reshape(5,4) A/A.sum(axis 1) #改为A/A.sum(axis 0)可行
输出结果报错 因为A是5*4矩阵A.sum(axis 1)是一个1*5向量无法触发广播机制。若改为axis 0 则可行。
3.3.当你在曼哈顿的两点之间旅行时 你需要在坐标上走多远 也就是说 就大街和街道而言 你能斜着走吗不能斜着走 用一范数来刻画距离。
3.4.向linalg.norm函数提供3个或更多轴的张量 并观察其输出。对于任意形状的张量这个函数计算得到什么?
A torch.ones(12).reshape(2,2,3) print(A) A A.float() torch.norm(A)##所有值的L2范数
输出结果
tensor(3.4641)
对更多轴的张量求范数时 仍然是把所有数据进行求。
四、微分和求导作业题 4.1.绘制函数和其在x 1处切线的图像。import numpy as np from d2l import torch as d2l x np.arange(0.5,2,0.1)#生成一组数 起点x 0.5 终点x 2 步长是0.1 def f(x): return x**3-x**(-1) d2l.plot(x,[f2(x),4*x-4], x , f(x) ,legend [ f(x) , Tangent line (x 1) ])
输出结果
4.2.为什么计算二阶导数比一阶导数的开销要更大因为计算二阶导数需要先求一阶导数。
4.3.在运行反向传播函数之后 立即再次运行它 看看会发生什么。会报错 因为不允许连续backward 前向过程建立计算图 反向传播后释放需要更新x.grad才可以再backward。
4.4.在控制流的例子中 我们计算d关于a的导数 如果我们将变量a更改为随机向量或矩阵 会发生什么 此时 计算结果f(a)不再是标量。结果会发生什么 我们如何分析这个结果对向量矩阵直接进行反向传播会报错。对非标量调用 backward 需要传入一个 gradient 参数 该参数指定微分函数关于 self 的梯度。
4.5.重新设计一个求控制流梯度的例子。运行并分析结果。def f(a): if a.norm() 10: b 2*a else: b a 2 return b a torch.randn(10, requires_grad True) d f(a) print(d) #d.backward() d.sum().backward()#等价于d.backward(torch.ones(len(a))) a.grad
运行结果
tensor([1.0999, 2.2732, 1.8459, 0.1245, 2.4950, 1.9525, 4.6292, 2.4428, 2.4967, 1.2529], grad_fn AddBackward0 ) tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])4.6.使 ( ) sin( ) 绘制 ( )和 ( ) 的图像 其中后者不使用 ′( ) cos( )。
x torch.arange(-5,5,0.1,requires_grad True) y torch.sin(x)#f sinx(x) grad torch.zeros(len(y))#创建保存f (x[i]) 导数的向量grad x1 x.detach().numpy()#tensor转array才可以调用绘图函数 y1 y.detach().numpy() for i in range(len(grad)): #求sinx在每一个x[i]处的导数 y[i].backward(retain_graph True) #自动求导 grad[i] x.grad[i] d2l.plot(x1,[y1,grad], x , f(x) ,legend [ f(x) , df(x) ])
运行结果
总结 这周上课状态越来越好了 但仍然有一些课程跟不太上 作业题不会写。可能是因为前两周没有及时把课上内容弄懂积累下来的所以跟不上。深度学习方面课程也是越来越难 虽然作业题都比较简单 但确画了课后很多时间。总体学习效率还是偏低 一周过得很快 希望下周能更加努力。



