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使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 Python
详细讲解用Python发送SMTP邮件的教程
Apr 29 Python
浅析Python中的for 循环
Jun 09 Python
python中如何使用正则表达式的非贪婪模式示例
Oct 09 Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
详解Python字符串切片
May 20 Python
Python类中方法getitem和getattr详解
Aug 30 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 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
如何过滤高亮显示非法字符
2006/10/09 PHP
PHP 第一节 php简介
2012/04/28 PHP
PHP CURL使用详解
2019/03/21 PHP
PHP+Redis开发的书签案例实战详解
2019/07/09 PHP
html+js实现动态显示本地时间
2013/09/21 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
Python实现计算最小编辑距离
2016/03/17 Python
浅析Python编写函数装饰器
2016/03/18 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
python 字典操作提取key,value的方法
2019/06/26 Python
python解释器spython使用及原理解析
2019/08/24 Python
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
商务日语专业毕业生求职信
2013/10/26 职场文书
精彩的广告词
2014/03/19 职场文书
故意杀人案辩护词
2015/05/21 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
如何利用python实现Simhash算法
2022/06/28 Python