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返回昨天日期的方法
May 13 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
python生成带有表格的图片实例
Feb 03 Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 Python
python科学计算之narray对象用法
Nov 25 Python
python读取ini配置的类封装代码实例
Jan 08 Python
Python日志logging模块功能与用法详解
Apr 09 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 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 和 HTML
2006/10/09 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js select option对象小结
2013/12/20 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
python3 shelve模块的详解
2017/07/08 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
浅析Python面向对象编程
2020/07/10 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
初一英语教学反思
2014/01/11 职场文书
爱心捐书活动总结
2014/07/05 职场文书
父母教会我观后感
2015/06/17 职场文书
行政复议决定书
2015/06/24 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
python 实现图片特效处理
2022/04/03 Python