Pytorch学习(十五)------ 杂项知识汇总

总说记录一下一些小知识, 方便查用.(不断更新中) 1. 自定义RNN的写法: Implementation of Multiplicative LSTM 2. 自定义二阶梯度写法: How to implement customized layer with second order derivatives How to customize the double backward 3...
摘要由CSDN通过智能技术生成

总说

记录一下一些小知识, 方便查用.(不断更新中)

  1. 自定义RNN的写法: Implementation of Multiplicative LSTM
  2. 自定义二阶梯度写法: How to implement customized layer with second order derivatives
    How to customize the double backward
  3. Feeding a Custom Gradient into LSTMs
  4. retain_graph的讨论
  5. 定义需要更新的参数 ------ 2019.3.13

定义需要更新的参数注意事项

简单来说, 我们需要更新的参数一般放在__init__函数中, 如果是可以用现有的层, 比如Conv2d, Linear之类的, 就直接用就行了. 因为这些层都是 Module类, 里面定义了 weights, bias等, 这些都是定一层Parameter类型, 当然默认是requires_grad=True, 值得注意的是, 只有Parameter类型, 才会被 optimizer拿到. 这是因为, 一个我们定义的网络是继承自nn.Module()类.

optimizer

一般情况下, 我们用 Module类中的model.parameters()可以得到网络中所有注册为Parameter()类的参数. 同时model.zero_grad()可以把所有为Parameter()类的参数进行梯度清零.
那么, 我们更新参数一般是:

with torch.no_grad():
   # 最简单的梯度下降
   for p in model.parameters(): p -= p.grad * lr
   model.zero_grad()

为了更加简化参数更新方式, pytorch提供optimizer类, 从而简化操作

my_optimizer.step()
my_optimizer.zero_grad()

optimizer.py中 zero_grad的定义, 我们可以看见, 是把放入optimizer中的所有参数进行置0.

    def zero_grad(self<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值