pytorch 中forward 的用法与解释说明

 更新时间:2021年02月26日 11:32:03   作者:JY丫丫  
这篇文章主要介绍了pytorch 中forward 的用法与解释说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

前言

最近在使用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 tornado上传文件的功能

    Python tornado上传文件的功能

    这篇文章主要介绍了Python tornado上传文件的功能,代码分为普通上传和ajax上传,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python3使用requests登录人人影视网站的方法

    Python3使用requests登录人人影视网站的方法

    通过本文给大家介绍python代码实现使用requests登录网站的过程。非常具有参考价值,感兴趣的朋友一起学习吧
    2016-05-05
  • 详解Python如何在多层循环中使用break/continue

    详解Python如何在多层循环中使用break/continue

    关于break/continue这两个关键字在平常的使用过程中一直比较迷糊。所以本文将详细讲讲Python如何在多层循环中使用break/continue,需要的可以参考一下
    2022-05-05
  • Python使用dis模块把Python反编译为字节码的用法详解

    Python使用dis模块把Python反编译为字节码的用法详解

    通常来说Python的性能或代码质量的评估可以通过dis模块获取到对应的字节码指令来进行评估,因而这里我们就来看一下Python使用dis模块把Python反编译为字节码的用法详解:
    2016-06-06
  • python图书管理系统

    python图书管理系统

    这篇文章主要为大家详细介绍了python图书管理系统的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python 高级专用类方法的实例详解

    Python 高级专用类方法的实例详解

    这篇文章主要介绍了Python 高级专用类方法的实例详解的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • 利用Python实现命令行版的火车票查看器

    利用Python实现命令行版的火车票查看器

    当你想查询一下火车票信息的时候,你还在上12306官网吗?或是打开你手机里的APP?下面让我们来用Python写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你想要的火车票信息!如果你刚掌握了Python基础,这将是个不错的小练习。
    2016-08-08
  • Python webargs 模块的简单使用

    Python webargs 模块的简单使用

    webargs是一个用于解析和验证HTTP请求对象的Python库,今天通过本文给大家介绍Python webargs 模块的安装使用,感兴趣的朋友一起看看吧
    2022-01-01
  • Python 脚本实现淘宝准点秒杀功能

    Python 脚本实现淘宝准点秒杀功能

    这篇文章主要介绍了python实现淘宝准点秒杀脚本,本文图文实例相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 如何提取python字符串括号中的内容

    如何提取python字符串括号中的内容

    这篇文章主要介绍了如何提取python字符串括号中的内容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论