pytorch 中forward 的用法与解释说明


Posted in Python onFebruary 26, 2021

前言

最近在使用pytorch的时候,模型训练时,不需要使用forward,只要在实例化一个对象中传入对应的参数就可以自动调用 forward 函数

即:

forward 的使用

class Module(nn.Module):
 def __init__(self):
  super(Module, self).__init__()
  # ......
  
 def forward(self, x):
  # ......
  return x
data = ..... #输入数据
# 实例化一个对象
module = Module()
# 前向传播
module(data) 
# 而不是使用下面的
# module.forward(data)

实际上

module(data)

是等价于

module.forward(data)

forward 使用的解释

等价的原因是因为 python calss 中的__call__和__init__方法.

class A():
 def __call__(self):
  print('i can be called like a function')
 
a = A()
a()

out:

i can be called like a function

__call__里调用其他的函数

class A():
 def __call__(self, param):
  
  print('i can called like a function')
  print('传入参数的类型是:{} 值为: {}'.format(type(param), param))
 
  res = self.forward(param)
  return res
 
 def forward(self, input_):
  print('forward 函数被调用了')
 
  print('in forward, 传入参数类型是:{} 值为: {}'.format( type(input_), input_))
  return input_ 
a = A() 
input_param = a('i')
print("对象a传入的参数是:", input_param)

out:

i can called like a function

传入参数的类型是:<class ‘str'> 值为: i

forward 函数被调用了

in forward, 传入参数类型是:<class ‘str'> 值为: i

对象a传入的参数是: i

补充:Pytorch 模型中nn.Model 中的forward() 前向传播不调用 解释

在pytorch 中没有调用模型的forward()前向传播,只实列化后把参数传入。

定义模型

class Module(nn.Module):
 def __init__(self):
  super(Module, self).__init__()
  # ......
 
 def forward(self, x):
  # ......
  return x
data = ..... #输入数据
# 实例化一个对象
module = Module()
# 前向传播 直接把输入传入实列化
module(data) 
#没有使用module.forward(data)

实际上module(data) 等价于module.forward(data)

等价的原因是因为 python calss 中的__call__ 可以让类像函数一样调用

当执行model(x)的时候,底层自动调用forward方法计算结果

class A():
 def __call__(self):
  print('i can be called like a function')
 
a = A()
a()
>>>i can be called like a function

在__call__ 里可调用其它的函数

class A():
 def __call__(self, param):
  
  print('我在__call__中,传入参数',param)
 
  res = self.forward(param)
  return res
 
 def forward(self, x):
  print('我在forward函数中,传入参数类型是值为: ',x)
  return x
 
a = A()
y = a('i')
 >>> 我在__call__中,传入参数 i
 >>>我在forward函数中,传入参数类型是值为: i
print("传入的参数是:", y)
 >>>传入的参数是: i

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python中数字以及算数运算符的相关使用
Oct 12 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
python数据结构之线性表的顺序存储结构
Sep 28 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
python 中如何获取列表的索引
Jul 02 Python
Python实现代码统计工具
Sep 19 Python
python实现滑雪游戏
Feb 22 Python
django自带的权限管理Permission用法说明
May 13 Python
Python利用Xpath选择器爬取京东网商品信息
Jun 01 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 #Python
pycharm Tab键设置成4个空格的操作
Feb 26 #Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 #Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 #Python
Python爬取网站图片并保存的实现示例
Feb 26 #Python
python中使用asyncio实现异步IO实例分析
Feb 26 #Python
浅析Python模块之间的相互引用问题
Feb 26 #Python
You might like
一次编写,随处运行
2006/10/09 PHP
PHP4实际应用经验篇(9)
2006/10/09 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
$()JS小技巧
2007/07/21 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
layui分页效果实现代码
2017/05/19 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
js回调函数仿360开机
2019/12/26 Javascript
python中from module import * 的一个坑
2014/07/20 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
python安装及变量名介绍详解
2020/12/12 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
经济系大学生求职信
2013/10/01 职场文书
自立自强的名人事例
2014/02/10 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
转让协议书范本
2014/04/15 职场文书
商务日语专业自荐信
2014/04/17 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers