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 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
MySQL最常见的操作语句小结
May 07 Python
Python实现的生成格雷码功能示例
Jan 24 Python
python实现微信自动回复功能
Apr 11 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
python读写csv文件实例代码
Jul 05 Python
Python二元赋值实用技巧解析
Oct 25 Python
python处理RSTP视频流过程解析
Jan 11 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
python实现学员管理系统(面向对象版)
Jun 05 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
层叠菜单的动态生成
2006/10/09 PHP
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
javascript css styleFloat和cssFloat
2010/03/15 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
Linux下Python获取IP地址的代码
2014/11/30 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
python中二分查找法的实现方法
2020/12/06 Python
python元组拆包实现方法
2021/02/28 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
大学四年规划书范文
2013/12/27 职场文书
业务总经理岗位职责
2014/02/03 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
nginx配置之并发频次限制
2022/04/18 Servers