PyTorch学习笔记(三)——autograd

1、Variable

Variable的构造函数需要传入Tensor,同时有两个可选参数:
requests_grad :是否求导.默认为False.
volatile:如果设置为True,则构建在该variable上的图都不会求导,优先级大于 requests_grad。默认为False。在不需反向传播的情况下可以设置此参数,节省内存。
variable.backward()主要有一下参数:
grad_variables:形状与variable一致。对于 y=a+b;z=y.sum():  为标量,可以省略此参数, 默认为1y.backward()等价于 z.backward(y_grad)
retain_graph:保持反向传播过程中的参数不清空,可以用来 多次反向传播
create_graph: 对反向传播过程在次创建图,可通过 backward of backward实现 高阶求导

2、计算图

PyTorch会随着变量赋值,动态生成计算图。在Variablegrad_fn中记录了该变量是哪个操作的输出,在反向传播过程中,autograd可以沿着这个图从根节点溯源,并按照backward函数求出各个变量的梯度。

在反向传播过程中非叶子节点的导数计算完成后即被清空。如果想查看这个变量的梯度,有两张方法:
使用autograd.grad函数
使用hook
对于 y=a+b;z=y.sum():
grad函数: t.autograd.grad(z,y),隐式调用backward()
hook:
def f_hook(grad):
	print(grad)
hook_handle = y.register_hook(f_hook)
hook_handle.remove()  # 用完之后移除hook

3、扩展autograd

绝大多数的函数都可以自动实现反向求导,对于自己写的复杂的不能自动反向求导的函数,可以通过继承autograd.Function实现forward函数和backward函数的形式手动实现反向求导

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

师大先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值