《深度学习》课后习题解析(仅供参考)

(1)给定任意方矩阵 A , A+A⊤ 总是对称的吗?为什么?

由线性代数的基础知识可知, (A + AT)T = AT + (AT)T = A + AT

(2) 在2.3.4节中定义了形状(2,3,4)的张量X.len(X)的输出结果是什么?

X = torch.arange(24).reshape(2, 3, 4)
len(X)

(3) 对于任意形状的张量X,len(X)是否总是对应于X特定轴的长度?这个轴是什么?

len(X) 总对应第 0 轴的长度(可以利用代码自己实现)

(4) 在2.3.6节基础上运行A/A.sum(axis=1),看看会发生什么。你能分析原因吗?

A = torch.arange(12).reshape(3,4)
A / A.sum(axis=1)

通过照抄2.3.6节的代码可以发现运行后出现如下错误

RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 1

这是因为维度不对 A 是一个3 * 4 的矩阵,而 A.sum(axis=1) 是一个大小为 3 的向量,两者不能相除。(注:广播只能发生在两者维数相同的情况下,比如都是二维)

2. 编程绘制函数  和其在x = 1处切线的图像

#导入包
import matplotlib.pyplot as plt
import torch
import numpy as np
#开始设置相关参数,按照求切线的过程运算
x = torch.tensor([1.]) #设置x的值为tensor形式的,方便后面求导
x.requires_grad_(True) #开启递归运算,为后面求导做准备
y = x**3 - 1/x  
y.backward() #求导 value存在x.grad中
k = (x.grad).numpy()[0] #提取需要的值(斜率) x.grad 输出是 tensor([4.])
x = 1  #此时x为一个int型的数据主要为了方便后面计算b的值
y = x**3 - 1/x  #再次设置一遍是为了计算切线的
b = y - k*x #求b的值
#开始话函数
x = np.arange(-5,5,0.01) #产生x的数据范围(-10,10)步长为0.0.1
y1 = x**3 - 1 / x #原函数
y2 = k*x + b #切线函数
plt.plot(x,y1,label = "y1",c = "b") # y1
plt.plot(x,y2,label = "y2",c = "g",linestyle = "-.") # y2
plt.xlabel('x')
plt.ylabel('y')
plt.ylim(-20,20) #规定一下y轴的范围
plt.show()

3. 为什么计算二阶导数比一阶导数的开销要更大?

因为二阶导数是在一阶导数的基础上再求导,所以开销肯定比计算一阶导数大

4. 给定两个概率为 P(A) 和 P(B) 的事件,计算 P(A∪B) 和 P(A∩B) 的上限和下限。(提示:使用友元图来展示这些情况。)

对于 P ( A ∪ B ) ,上限是 P(A) + P(B),下限是 max{P(A), P(B)}。

对于P ( A ∩ B),上限是 min{P(A), P(B)},下限是 0。

(画图)

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值