动手学深度学习pytorch版练习解答——3-2线性回归的从零开始实现

练习

  1. 如果我们将权重初始化为零,会发⽣什么。算法仍然有效吗?

\qquad 解:全0初始化也是常用的一个选择,跟正态分布初始化相比可能会走向不同的局部最优点,算法还是有效的。

  1. 假设你是乔治·西蒙·欧姆,试图为电压和电流的关系建⽴⼀个模型。你能使⽤⾃动微分来学习模型的参数吗?

\qquad 解:题例中电流当做features,电压当做labels,描点绘图后发现二者呈线性关系,再用书上的代码走一遍即可。

  1. 您能基于普朗克定律使⽤光谱能量密度来确定物体的温度吗?

\qquad 解:能量密度频谱u关于波长的函数是:

在这里插入图片描述

\qquad 写成温度关于能量密度的函数,即:

在这里插入图片描述

  1. 如果你想计算⼆阶导数可能会遇到什么问题?你会如何解决这些问题?

\qquad 解:遇到的问题应该是一阶导函数计算式无法直接获取。解决方法:求一阶导数保存计算图。具体方法见后面代码。

  1. 为什么在squared_loss函数中需要使⽤reshape函数?

\qquad 解: y ^ \hat{y} y^是列向量, y y y是行向量

  1. 尝试使⽤不同的学习率,观察损失函数值下降的快慢。

\qquad 解:这个没有统一的答案,跑模型时自己记录下当前学习率和训练时间再比较即可。

  1. 如果样本个数不能被批量⼤小整除,data_iter函数的⾏为会有什么变化?

\qquad 解:执行到最后所剩样本数不能被整除,会报错

第四问代码学习,参考pytorch autograd计算标量函数二阶导数
在这里插入图片描述

#第4问求二阶导数:f(x)=x^2+sinx→f'(x)=2x+cosx→f''(x)=2-sinx
#这里取x=π/2,π
import math
import torch
import numpy as np

x = torch.tensor([math.pi/2,math.pi],requires_grad=True)
y = x**2 + torch.sin(x)

#和真实值比较
true_dy = 2*x+torch.cos(x)#这个结果有两个量,一个是张量另一个是梯度类型
true_d2y = 2 - torch.sin(x)

#求出一阶导,保存计算图后再去求二阶导
dy = torch.autograd.grad(y,x,
                         grad_outputs=torch.ones(x.shape),#这个参数要人为指定好
                         create_graph=True,
                         retain_graph=True#保存计算图
                        )
#在张量后加上.detach().numpy()可以仅输出张量数值
print("一阶导真实值:{} \n一阶导计算值:{}".format(true_dy.detach().numpy(),dy[0].detach().numpy()))

#求二阶导。上面的dy的第一个元素是一阶导数值
d2y = torch.autograd.grad(dy[0],x,
                         grad_outputs=torch.ones(x.shape),
                         create_graph=False#不再弄计算图,销毁前面的计算图
                         )
print("\n二阶导真实值:{} \n二阶导计算值:{}".format(true_d2y.detach().numpy(),d2y[0].detach().numpy()))
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值