Pytorch反向求导更新网络参数的方法


Posted in Python onAugust 17, 2019

方法一:手动计算变量的梯度,然后更新梯度

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进行参数更新之前,需要写前向与反向传播求导的代码

以上这篇Pytorch反向求导更新网络参数的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
进一步探究Python中的正则表达式
Apr 28 Python
Python 专题一 函数的基础知识
Mar 16 Python
Python 元类实例解析
Apr 04 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
Python实现使用request模块下载图片demo示例
May 24 Python
Python for循环及基础用法详解
Nov 08 Python
Python程序控制语句用法实例分析
Jan 14 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
Python中pass的作用与使用教程
Nov 13 Python
pytorch 模型可视化的例子
Aug 17 #Python
pytorch 输出中间层特征的实例
Aug 17 #Python
基于pytorch的保存和加载模型参数的方法
Aug 17 #Python
pytorch 固定部分参数训练的方法
Aug 17 #Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 #Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 #Python
python PyQt5/Pyside2 按钮右击菜单实例代码
Aug 17 #Python
You might like
用libtemplate实现静态网页生成
2006/10/09 PHP
PHP Socket 编程
2010/04/09 PHP
使用PHP编写的SVN类
2013/07/18 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
热点新闻滚动特效的js代码
2013/08/17 Javascript
再谈JavaScript线程
2015/07/10 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
Python与Java间Socket通信实例代码
2017/03/06 Python
Python实现购物车程序
2018/04/16 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
介绍下Java中==和equals的区别
2013/09/01 面试题
自我评价怎么写好呢?
2013/12/05 职场文书
最受欢迎的自我评价
2013/12/22 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
学前教育见习总结
2015/06/23 职场文书
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS