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中的元组概念
May 21 Python
详解Golang 与python中的字符串反转
Jul 21 Python
python生成圆形图片的方法
Mar 25 Python
Python语言的变量认识及操作方法
Feb 11 Python
代码详解django中数据库设置
Jan 28 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
Python 如何测试文件是否存在
Jul 31 Python
python实现简单的井字棋
May 26 Python
Python面试不修改数组找出重复的数字
May 20 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
js判断undefined类型示例代码
2014/02/10 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
浅谈Vue.use的使用
2018/08/29 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
python中readline判断文件读取结束的方法
2014/11/08 Python
Python使用剪切板的方法
2017/06/06 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
企业行政文员岗位职责
2013/12/03 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
激励员工的口号
2014/06/16 职场文书
员工保密协议书
2014/09/27 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
董事长新年致辞
2015/07/29 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书