Pytorch反向求导更新网络参数
2018-02-18 00:33
453 查看
方法一:手动计算变量的梯度,然后更新梯度
import torch from torch.autograd import Variable # 定义参数 w1 = Variable(torch.FloatTensor([1,2,3]),requires_grad = True) # 定义输出 d = torch.mean(w1) # 反向求导 d.backward() # 定义学习率等参数 lr = 0.001 # 手动更新参数 w1.data.zero_() # BP求导更新参数之前,需先对导数置0 w1.data.sub_(lr*w1.grad.data)
一个网络中通常有很多变量,如果按照上述的方法手动求导,然后更新参数,是很麻烦的,这个时候可以调用torch.optim
方法二:使用torch.optim
import torch from torch.autograd import Variable import torch.nn as nn import torch.optim as optim # 这里假设我们定义了一个网络,为net steps = 10000 # 定义一个optim对象 optimizer = optim.SGD(net.parameters(), lr = 0.01) # 在for循环中更新参数 for i in range(steps): optimizer.zero_grad() # 对网络中参数当前的导数置0 output = net(input) # 网络前向计算 loss = criterion(output, target) # 计算损失 loss.backward() # 得到模型中参数对当前输入的梯度 optimizer.step() # 更新参数
注意:torch.optim只用于参数更新和对参数的梯度置0,不能计算参数的梯度,在使用torch.optim进行参数更新之前,需要写前向与反向传播求导的代码
相关文章推荐
- 神经网络中的Softmax是如何更新参数的
- 强化学习中DQN是如何更新网络参数的?
- caffe中网络参数更新总结
- 神经网络中的矩阵求导及反向传播推导
- pytorch中的pre-train函数模型引用及修改(增减网络层,修改某层参数等)
- caffe的finetuning是如何更新网络参数的
- 神经网络参数更新
- 神经网络更新参数的几种方法
- CS231n 卷积神经网络与计算机视觉 7 神经网络训练技巧汇总 梯度检验 参数更新 超参数优化 模型融合 等
- Linux系统内核网络参数的意义及应用
- 神经网络参数初始化对最终结果有重大影响
- 参数的更新
- tcp 网络参数
- Nginx HTTP负载均衡/反向代理的相关参数测试
- 网络请求怎么样和UI线程交互? Activity2怎么通知Activity1 更新数据
- 神经网络反向传播算法公式推导详解
- [神经网络]从反向传播(BP)到去噪自动编码器(DAE)
- sysctl.conf网络内核参数说明(转)
- 在caffe中固定某些网络参数,只训练某些层
- Android:网络:通过GET和POST两种方式上传参数