python PyTorch参数初始化和Finetune


Posted in Python onFebruary 11, 2018

前言

这篇文章算是论坛PyTorch Forums关于参数初始化和finetune的总结,也是我在写代码中用的算是“最佳实践”吧。最后希望大家没事多逛逛论坛,有很多高质量的回答。

参数初始化

参数的初始化其实就是对参数赋值。而我们需要学习的参数其实都是Variable,它其实是对Tensor的封装,同时提供了data,grad等借口,这就意味着我们可以直接对这些参数进行操作赋值了。这就是PyTorch简洁高效所在。

python PyTorch参数初始化和Finetune

所以我们可以进行如下操作进行初始化,当然其实有其他的方法,但是这种方法是PyTorch作者所推崇的:

def weight_init(m):
# 使用isinstance来判断m属于什么类型
  if isinstance(m, nn.Conv2d):
    n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
    m.weight.data.normal_(0, math.sqrt(2. / n))
  elif isinstance(m, nn.BatchNorm2d):
# m中的weight,bias其实都是Variable,为了能学习参数以及后向传播
    m.weight.data.fill_(1)
    m.bias.data.zero_()

Finetune

往往在加载了预训练模型的参数之后,我们需要finetune模型,可以使用不同的方式finetune。

局部微调

有时候我们加载了训练模型后,只想调节最后的几层,其他层不训练。其实不训练也就意味着不进行梯度计算,PyTorch中提供的requires_grad使得对训练的控制变得非常简单。

model = torchvision.models.resnet18(pretrained=True)
for param in model.parameters():
  param.requires_grad = False
# 替换最后的全连接层, 改为训练100类
# 新构造的模块的参数默认requires_grad为True
model.fc = nn.Linear(512, 100)

# 只优化最后的分类层
optimizer = optim.SGD(model.fc.parameters(), lr=1e-2, momentum=0.9)

全局微调

有时候我们需要对全局都进行finetune,只不过我们希望改换过的层和其他层的学习速率不一样,这时候我们可以把其他层和新层在optimizer中单独赋予不同的学习速率。比如:

ignored_params = list(map(id, model.fc.parameters()))
base_params = filter(lambda p: id(p) not in ignored_params,
           model.parameters())

optimizer = torch.optim.SGD([
      {'params': base_params},
      {'params': model.fc.parameters(), 'lr': 1e-3}
      ], lr=1e-2, momentum=0.9)

其中base_params使用1e-3来训练,model.fc.parameters使用1e-2来训练,momentum是二者共有的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用dom模块生成XML文件示例
Apr 05 Python
初步剖析C语言编程中的结构体
Jan 16 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
Python3中列表list合并的四种方法
Apr 19 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
对python while循环和双重循环的实例详解
Aug 23 Python
Django 返回json数据的实现示例
Mar 05 Python
Python多线程实现支付模拟请求过程解析
Apr 21 Python
python输出数学符号实例
May 11 Python
python语言中有算法吗
Jun 16 Python
彻底解决Python包下载慢问题
Nov 15 Python
Python装饰器用法示例小结
Feb 11 #Python
python PyTorch预训练示例
Feb 11 #Python
TensorFlow中权重的随机初始化的方法
Feb 11 #Python
python的staticmethod与classmethod实现实例代码
Feb 11 #Python
Python语言的变量认识及操作方法
Feb 11 #Python
利用Opencv中Houghline方法实现直线检测
Feb 11 #Python
tensorflow输出权重值和偏差的方法
Feb 10 #Python
You might like
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
用PHP读注册表
2006/10/09 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
php获取字段名示例分享
2014/03/03 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
js jquery数组介绍
2012/07/15 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
挂牌仪式主持词
2014/03/20 职场文书
廉洁自律承诺书
2014/03/27 职场文书
售房协议书
2014/08/19 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
办公室主任岗位职责
2015/01/31 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
郭明义观后感
2015/06/08 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫