PyTorch之nn.ReLU与F.ReLU的区别介绍


Posted in Python onJune 27, 2020

我就废话不多说了,大家还是直接看代码吧~

import torch.nn as nn
import torch.nn.functional as F
import torch.nn as nn
 
class AlexNet_1(nn.Module):
 
  def __init__(self, num_classes=n):
    super(AlexNet, self).__init__()
    self.features = nn.Sequential(
      nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1),
      nn.BatchNorm2d(64),
      nn.ReLU(inplace=True),
     )
 
  def forward(self, x):
    x = self.features(x)
 
class AlexNet_2(nn.Module):
 
  def __init__(self, num_classes=n):
    super(AlexNet, self).__init__()
    self.features = nn.Sequential(
      nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1),
      nn.BatchNorm2d(64),
     )
 
  def forward(self, x):
    x = self.features(x)
    x = F.ReLU(x)

在如上网络中,AlexNet_1与AlexNet_2实现的结果是一致的,但是可以看到将ReLU层添加到网络有两种不同的实现,即nn.ReLU和F.ReLU两种实现方法。

其中nn.ReLU作为一个层结构,必须添加到nn.Module容器中才能使用,而F.ReLU则作为一个函数调用,看上去作为一个函数调用更方便更简洁。具体使用哪种方式,取决于编程风格。

在PyTorch中,nn.X都有对应的函数版本F.X,但是并不是所有的F.X均可以用于forward或其它代码段中,因为当网络模型训练完毕时,在存储model时,在forward中的F.X函数中的参数是无法保存的。

也就是说,在forward中,使用的F.X函数一般均没有状态参数,比如F.ReLU,F.avg_pool2d等,均没有参数,它们可以用在任何代码片段中。

补充知识:pytorch小知识点——in-place operation

一、什么是in-place

在pytorch的很多函数中经常看到in-place选项,具体是什么意思一直一知半解。这次专门来学习一下,in-place operation在pytorch中是指改变一个tensor的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值。可以把它称为原地操作符。

在pytorch中经常加后缀“_”来代表原地in-place operation,比如说.add_() 或者.scatter()。我们可以将in_place操作简单的理解类似于python中的"+=","-="等操作。

举个例子,下面是正常的加操作,执行结束后x的值没有变化

import torch
x = torch.rand(2)
x
Out[3]: tensor([0.3486, 0.2924])  #<-----这是x初始值
 
y = torch.rand(2)
y
Out[5]: tensor([0.6301, 0.0101])  #<-----这是y初始值
x.add(y)
Out[6]: tensor([0.9788, 0.3026])   #<-----这是x+y的结果
x
Out[7]: tensor([0.3486, 0.2924])  #<-----这是执行操作之后x的值
y
Out[8]: tensor([0.6301, 0.0101])   #<-----这是执行操作之后y的值

我们可以发现,在正常操作之后原操作数的值不会发生变化。

下面我们来看看in_place操作

import torch
x = torch.rand(2)
x
Out[3]: tensor([0.3486, 0.2924])  #<-----这是x初始值
y = torch.rand(2)
y
Out[5]: tensor([0.6301, 0.0101])  #<-----这是y初始值
x.add_(y)
Out[9]: tensor([0.9788, 0.3026])  #<-----这是x+y结果
x
Out[10]: tensor([0.9788, 0.3026]) #<-----这是操作后x的值
y
Out[11]: tensor([0.6301, 0.0101])  #<-----这是操作后y的值

通过对比可以发现,in_place操作之后,原操作数等于表达式计算结果。也就是说将计算结果赋给了原操作数。

二、不能使用in-place的情况

对于 requires_grad=True 的 叶子张量(leaf tensor) 不能使用 inplace operation

对于在 求梯度阶段需要用到的张量 不能使用 inplace operation

以上这篇PyTorch之nn.ReLU与F.ReLU的区别介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 条件判断的缩写方法
Sep 06 Python
python sort、sorted高级排序技巧
Nov 21 Python
Python写入CSV文件的方法
Jul 08 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
python队列queue模块详解
Apr 27 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
python内置数据类型之列表操作
Nov 12 Python
pytorch进行上采样的种类实例
Feb 18 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
Python如何telnet到网络设备
Feb 18 Python
python unittest单元测试的步骤分析
Aug 02 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 #Python
Pytorch 高效使用GPU的操作
Jun 27 #Python
Keras中的两种模型:Sequential和Model用法
Jun 27 #Python
keras输出预测值和真实值方式
Jun 27 #Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 #Python
浅谈keras 模型用于预测时的注意事项
Jun 27 #Python
python suds访问webservice服务实现
Jun 26 #Python
You might like
discuz安全提问算法
2007/06/06 PHP
php 购物车的例子
2009/05/04 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
Prototype Class对象学习
2009/07/19 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
script标签属性用type还是language
2015/01/21 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
中学教师管理制度
2014/01/14 职场文书
公司委托书格式
2014/08/01 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
中学教师个人总结
2015/02/10 职场文书
销售助理岗位职责
2015/02/11 职场文书
道歉信怎么写
2015/05/12 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android
Python开发五子棋小游戏
2022/05/02 Python