pytorch如何冻结某层参数的实现


Posted in Python onJanuary 10, 2020

在迁移学习finetune时我们通常需要冻结前几层的参数不参与训练,在Pytorch中的实现如下:

class Model(nn.Module):
 def __init__(self):
  super(Transfer_model, self).__init__()
  self.linear1 = nn.Linear(20, 50)
  self.linear2 = nn.Linear(50, 20)
  self.linear3 = nn.Linear(20, 2)

 def forward(self, x):
 pass

假如我们想要冻结linear1层,需要做如下操作:

model = Model()
# 这里是一般情况,共享层往往不止一层,所以做一个for循环
for para in model.linear1.parameters():
 para.requires_grad = False
# 假如真的只有一层也可以这样操作:
# model.linear1.weight.requires_grad = False

 最后我们需要将需要优化的参数传入优化器,不需要传入的参数过滤掉,所以要用到filter()函数。

optimizer = optim.Adam(filter(lambda p: p.requires_grad, model.parameters()), lr=0.1)

其它的博客中都没有讲解filter()函数的作用,在这里我简单讲一下有助于更好的理解。

filter(function, iterable)

  • function: 判断函数
  • iterable: 可迭代对象

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

filter()函数将requires_grad = True的参数传入优化器进行反向传播,requires_grad = False的则被过滤掉。

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

Python 相关文章推荐
在Python中使用判断语句和循环的教程
Apr 25 Python
python使用xlrd模块读写Excel文件的方法
May 06 Python
Python判断字符串与大小写转换
Jun 08 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
Python logging日志模块 配置文件方式
Jul 12 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
总结Pyinstaller打包的高级用法
Jun 28 Python
python标识符命名规范原理解析
Jan 10 #Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 #Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 #Python
Tensorflow Summary用法学习笔记
Jan 10 #Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 #Python
python numpy数组复制使用实例解析
Jan 10 #Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 #Python
You might like
用来给图片加水印的PHP类
2008/04/09 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
vue实现分页组件
2020/06/16 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
Python多线程实现同步的四种方式
2017/05/02 Python
Python探索之Metaclass初步了解
2017/10/28 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
Django框架反向解析操作详解
2019/11/28 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
横空出世观后感
2015/06/09 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript