《动手学深度学习》练习—第二章预备知识

一、2.1数据操作

1、运⾏本节中的代码。将本节中的条件语句X == Y更改为X < Y或X > Y,然后看看你可以得到什么样的张量。
回答: 都是输出结果比较的张量
X==Y时
在这里插入图片描述
X<Y时:
在这里插入图片描述
X>Y时:
在这里插入图片描述
2、⽤其他形状(例如三维张量)替换⼴播机制中按元素操作的两个张量。结果是否与预期相同?
回答: 不一定,得看张量的大小,根据具体情况具体分析。
可以参考这个博客的分析:pytorch的广播机制

二、2.2数据预处理

1、删除缺失值最多的列。
回答: 可以利用isnull对缺失值进行统计,然后利用sum和idxmax找到对应的列序号,最后进行删除。
在这里插入图片描述
2、将预处理后的数据集转换为张量格式。
回答: 主要是利用torch.tensor进行转换
在这里插入图片描述

三、2.3线性代数

1、证明一个矩阵 𝐀的转置的转置是 𝐀 ,即 ( A T ) T = A (A^T)^T=A (AT)T=A
回答: B = A T ,则 B j i = A i j ,设 C = B T = ( A T ) T ,则可知 C i j = B j i ,故 C i j = A i j ,所以 ( A T ) T = A 。 B =A^T,则B_{ji} =A_{ij},设C=B^T=(A^T)^T,则可知C_{ij}=B_{ji},故C_{ij} =A_{ij},所以(A^T)^T=A。 B=AT,则Bji=Aij,设C=BT=(AT)T,则可知Cij=Bji,故Cij=Aij,所以(AT)T=A
2、给出两个矩阵 𝐀和 𝐁 ,证明“它们转置的和”等于“它们和的转置”,即 A T + B T = ( A + B ) T 。 A^T+B^T = (A+B)^T。 AT+BT=(A+B)T
回答: 设 A T + B T = C 。则 C i j = A j i + B j i ,又设 D = ( A + B ) ,则 D j i = A j i + B j i ,故 C = D T ,所以 A T + B T = ( A + B ) T 得证。 设 A^T+B^T = C。则C_{ij}=A_{ji}+B_{ji},又设D=(A+B),则D_{ji}=A_{ji}+B_{ji},故C=D^T,所以A^T+B^T = (A+B)^T得证。 AT+BT=C。则Cij=Aji+Bji,又设D=(A+B),则Dji=Aji+Bji,故C=DT,所以AT+BT=(A+B)T得证。
3、给定任意方阵 A , A + A T A, A+A^T AA+AT总是对称的吗?为什么?
回答: 设 B = A + A T ,则 B i j = A i j + A j i , B j i = A j i + A i j = B i j ,所以总是对称的得证 设B = A+A^T ,则B_{ij} = A_{ij} + A_{ji},B_{ji} = A_{ji} + A_{ij} = B_{ij},所以总是对称的得证 B=A+AT,则Bij=Aij+AjiBji=Aji+Aij=Bij,所以总是对称的得证
4、本节中定义了形状 (2,3,4)的张量X。len(X)的输出结果是什么?
回答: 2,返回第一维度的长度
在这里插入图片描述
5、对于任意形状的张量X,len(X)是否总是对应于X特定轴的长度?这个轴是什么?
回答: 返回第一维度
6、运行A/A.sum(axis=1),看看会发生什么。请分析一下原因?
回答: 报错,因为轴数变了,原来的A.sum(axis=1, keepdims=True)保持住了轴数。因此根据广播的原理则进行了复制,从而可以顺利计算,但是没有使用keepdims的话则会计算成一个1*5的向量,这个时候直接做除法会变成用每一行去除以这一行,从而报错,因为只有四列,没有第五列可以用来除。
在这里插入图片描述
7、考虑一个具有形状 (2,3,4)的张量,在轴0、1、2上的求和输出是什么形状?
回答: [3,4],[2,4],[2,3]
在这里插入图片描述
8、为linalg.norm函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?
回答: 计算的结果就是所有值的平方和再开方。
在这里插入图片描述

四、2.4微积分

1、绘制函数 𝑦=𝑓(𝑥)=𝑥 3 − 1 x ^3-\frac{1}{x} 3x1 和其在 𝑥=1处切线的图像。
回答: 需要修改的地方及最后的结果如下图
在这里插入图片描述
在这里插入图片描述
2、求函数 𝑓(𝐱)=3𝑥 1 2 + 5 e x 2 ^2_1+5e^{x_2} 12+5ex2的梯度。
回答: 【6 x 1 , 5 e x 2 x_1,5e^{x_2} x1,5ex2
3、函数 𝑓(𝐱)=‖𝐱‖2的梯度是什么?
回答: x i ∣ ∣ x ∣ ∣ 2 \frac{x_i}{||x||_2} ∣∣x2xi
4、尝试写出函数 𝑢=𝑓(𝑥,𝑦,𝑧),其中 𝑥=𝑥(𝑎,𝑏), 𝑦=𝑦(𝑎,𝑏), 𝑧=𝑧(𝑎,𝑏)的链式法则。
回答: 链式法则的解释如下
在这里插入图片描述
因此易得对应的链式法则为
d u d a = d u d x d x d a + d u d y d y d a + d u d z d z d a \frac{du}{da} = \frac{du}{dx}\frac{dx}{da} + \frac{du}{dy}\frac{dy}{da}+\frac{du}{dz}\frac{dz}{da} dadu=dxdudadx+dydudady+dzdudadz
d u d b = d u d x d x d b + d u d y d y d b + d u d z d z d b \frac{du}{db} = \frac{du}{dx}\frac{dx}{db} + \frac{du}{dy}\frac{dy}{db}+\frac{du}{dz}\frac{dz}{db} dbdu=dxdudbdx+dydudbdy+dzdudbdz

五、2.5自动微分

1、为什么计算二阶导数比一阶导数的开销要更大?
回答: 根据链式法则,二阶导数需要求两次导,所以开销要比一阶来得更大。
2、在运行反向传播函数之后,立即再次运行它,看看会发生什么。
回答: 会报错,因为中间的那些参数已经在第一次计算后被释放了,所以无法进行第2次计算。
在这里插入图片描述
3、在控制流的例子中,我们计算d关于a的导数,如果将变量a更改为随机向量或矩阵,会发生什么?
回答:
会报错,表示只能为标量隐式创建梯度
在这里插入图片描述
4、重新设计一个求控制流梯度的例子,运行并分析结果。
回答:
设计如下

def f(a):
    b = a * 2
    while b.exp() < 1000:
        b = b * 2
    if b.sum() > 0:
        c = b
    else:
        c = 100 * b
    return c
    
a = torch.randn(size=(), requires_grad=True)
d = f(a)
d.backward()
a.grad==d/a

我只是将其中的norm函数这一判断条件修改成了exp这一函数,结果还是一样满足线性,所以输出true。
5、使 𝑓(𝑥)=sin(𝑥),绘制 𝑓(𝑥)和 d f ( x ) d x \frac{df(x)}{dx} dxdf(x) 的图像,其中后者不使用 𝑓′(𝑥)=cos(𝑥)。
回答:

import torch 
import matplotlib.pyplot as plt
from matplotlib_inline import backend_inline
from d2l import torch as d2l

x = torch.arange(-3,3,0.1)
x.requires_grad_(True)
y = torch.sin(x)
y.sum().backward()
plt.plot(x.detach(), y.detach(), label='y=sin(x)') 
plt.plot(x.detach(), x.grad, label='dsin(x)=cos(x)') 
plt.legend(loc='upper center')
plt.show()

注意事项1:这里必须使用y.sum(),因为只有标量才可以反向传播回去
注意事项2:这里必须使用detach,因为涉及了计算图的计算,如果不适用detach直接使用原来的x和y,可能会影响计算图的计算。
这两个注意事项其实在2.5.2和2.5.3中都有体现。
参考网址:相关作业

六、2.6概率

1、进行 𝑚=500组实验,每组抽取 𝑛=10个样本。改变 𝑚和 𝑛,观察和分析实验结果。
回答: 将m改为10000
在这里插入图片描述
改为1和10时
在这里插入图片描述
改为100和10时
在这里插入图片描述

改为10000和10时
在这里插入图片描述
结论:n越大,一开始越接近1/6的概率,次数m越大,则越来越收敛。
2、给定两个概率为 𝑃(A) 和 𝑃(B) 的事件,计算 𝑃(A∪B) 和 𝑃(A∩B) 的上限和下限。(提示:使用友元图来展示这些情况。)
回答:
上限是两者无关的情况,下限是两者强相关,其中一个是另一个的子事件的情况。
m a x ( P ( A ) , P ( B ) ) ≤ P ( A ∪ B ) ≤ P ( A ) + P ( B ) max(P(A),P(B))≤ P(A∪B)≤P(A)+P(B) max(P(A),P(B))PABP(A)+P(B)
上限是两者强相关,其中一个是另一个的子事件的情况,下限是两者无关的情况。
0 ≤ P ( A ∩ B ) ≤ m i n ( P ( A ) , P ( B ) ) 0 ≤ P(A∩B)≤min(P(A),P(B)) 0PABmin(P(A),P(B))
友元图画起来比较麻烦,所以就不画了。
3、设我们有一系列随机变量,例如 𝐴 、 𝐵 和 𝐶 ,其中 𝐵 只依赖于 𝐴 ,而 𝐶 只依赖于 𝐵 ,能简化联合概率 𝑃(𝐴,𝐵,𝐶) 吗?(提示:这是一个马尔可夫链。)
回答: 马尔可夫性质——下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。
P ( A , B , C ) = P ( C ∣ B ) P ( B ∣ A ) P ( A ) P(A,B,C) = P(C|B)P(B|A)P(A) P(A,B,C)=P(CB)P(BA)P(A)
4、在2.6.2节中,第一个测试更准确。为什么不运行第一个测试两次,而是同时运行第一个和第二个测试?
回答:
用不同的测试才具有条件独立性,假设现在第一个测试的流程是有问题的,那么两次之间是有相关性的,因而不能利用条件独立性来求解。

七、2.7查阅文档

1、在深度学习框架中查找任何函数或类的文档。请尝试在这个框架的官方网站上找到文档。
直接搜索pytorch或者点击这里pytorch官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值