对pytorch中的梯度更新方法详解


Posted in Python onAugust 20, 2019

背景

使用pytorch时,有一个yolov3的bug,我认为涉及到学习率的调整。收集到tencent yolov3和mxnet开源的yolov3,两个优化器中的学习率设置不一样,而且使用GPU数目和batch的更新也不太一样。据此,我简单的了解了下pytorch的权重梯度的更新策略,看看能否一窥究竟。

对代码说明

共三个实验,分布写在代码中的(一)(二)(三)三个地方。运行实验时注释掉其他两个

实验及其结果

实验(三):

不使用zero_grad()时,grad累加在一起,官网是使用accumulate 来表述的,所以不太清楚是取的和还是均值(这两种最有可能)。

不使用zero_grad()时,是直接叠加add的方式累加的。

tensor([[[ 1., 1.],……torch.Size([2, 2, 2])
0 2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
tensor([[[ 2., 2.],…… torch.Size([2, 2, 2])
1 2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
tensor([[[ 3., 3.],…… torch.Size([2, 2, 2])
2 2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

实验(二):

单卡上不同的batchsize对梯度是怎么作用的。 mini-batch SGD中的batch是加快训练,同时保持一定的噪声。但设置不同的batchsize的权重的梯度是怎么计算的呢。

设置运行实验(二),可以看到结果如下:所以单卡batchsize计算梯度是取均值的

tensor([[[ 3., 3.],…… torch.Size([2, 2, 2])

实验(一):

多gpu情况下,梯度怎么合并在一起的。

在《training imagenet in 1 hours》中提到grad是allreduce的,是累加的形式。但是当设置g=2,实验一运行时,结果也是取均值的,类同于实验(二)

tensor([[[ 3., 3.],…… torch.Size([2, 2, 2])

实验代码

import torch
import torch.nn as nn
from torch.autograd import Variable


class model(nn.Module):
 def __init__(self, w):
  super(model, self).__init__()
  self.w = w

 def forward(self, xx):
  b, c, _, _ = xx.shape
  # extra = xx.device.index + 1 ## 实验(一)
  y = xx.reshape(b, -1).mm(self.w.cuda(xx.device).reshape(-1, 2) * extra)
  return y.reshape(len(xx), -1)


g = 1
x = Variable(torch.ones(2, 1, 2, 2))
# x[1] += 1 ## 实验(二)
w = Variable(torch.ones(2, 2, 2) * 2, requires_grad=True)
# optim = torch.optim.SGD({'params': x},
lr = 0.01
momentum = 0.9
M = model(w)

M = torch.nn.DataParallel(M, device_ids=range(g))

for i in range(3):
 b = len(x)
 z = M(x)
 zz = z.sum(1)
 l = (zz - Variable(torch.ones(b).cuda())).mean()
 # zz.backward(Variable(torch.ones(b).cuda()))
 l.backward()
 print(w.grad, w.grad.shape)
 # w.grad.zero_() ## 实验(三)
 print(i, b, '* * ' * 20)

以上这篇对pytorch中的梯度更新方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取网页状态码示例
Mar 30 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
Feb 13 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
python Yaml、Json、Dict之间的转化
Oct 19 Python
Python读取图像并显示灰度图的实现
Dec 01 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 #Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 #Python
pytorch 加载(.pth)格式的模型实例
Aug 20 #Python
python multiprocessing模块用法及原理介绍
Aug 20 #Python
python 并发编程 阻塞IO模型原理解析
Aug 20 #Python
PyTorch中常用的激活函数的方法示例
Aug 20 #Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 #Python
You might like
pdo中使用参数化查询sql
2011/08/11 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
Python计算字符宽度的方法
2016/06/14 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python实现静态web服务器
2019/09/03 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
台湾旅游网站:灿星旅游
2018/10/11 全球购物
倡议书格式模板
2014/05/13 职场文书
争先创优心得体会
2014/09/12 职场文书
婚庆答谢词
2015/01/04 职场文书
公开致歉信
2019/06/24 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
openstack中的rpc远程调用的方法
2021/07/09 Python
Python实现照片卡通化
2021/12/06 Python