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操作列表之List.insert()方法的使用
May 20 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
python简单猜数游戏实例
Jul 09 Python
Python实现批量压缩图片
Jan 25 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
Python基于pip实现离线打包过程详解
May 15 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
教你如何用python操作摄像头以及对视频流的处理
Oct 12 Python
基于PyTorch实现一个简单的CNN图像分类器
May 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代码保护--Zend Guard的使用详解
2013/06/03 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
浅谈javascript中createElement事件
2014/12/05 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
python 识别图片中的文字信息方法
2018/05/10 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
django model object序列化实例
2020/03/13 Python
如何在django中运行scrapy框架
2020/04/22 Python
日本小田急百货官网:Odakyu
2018/07/19 全球购物
C面试题
2015/10/08 面试题
linux面试题参考答案(3)
2012/09/13 面试题
毕业生就业自荐书
2013/12/15 职场文书
爱心活动计划书
2014/04/26 职场文书
商业融资计划书
2014/04/29 职场文书
招商引资工作汇报
2014/10/28 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
市场部岗位职责
2015/02/12 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python