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进阶教程之文本文件的读取和写入
Aug 29 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
在ironpython中利用装饰器执行SQL操作的例子
May 02 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
Python调用C++程序的方法详解
Jan 24 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
Python基于pycrypto实现的AES加密和解密算法示例
Apr 10 Python
在vscode中配置python环境过程解析
Sep 28 Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 Python
Python3中对json格式数据的分析处理
Jan 28 Python
Python标准库之typing的用法(类型标注)
Jun 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
PHP+DBM的同学录程序(4)
2006/10/09 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
PHP内置加密函数详解
2016/11/20 PHP
jQuery1.6 使用方法一
2011/11/23 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
管理部部长岗位职责
2013/12/05 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
商务英语专业求职信范文
2014/01/28 职场文书
火车来了教学反思
2014/02/11 职场文书
2014年个人总结范文
2015/03/09 职场文书