gpt4 book ai didi

pytorch 中forward 的用法与解释说明

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 31 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章pytorch 中forward 的用法与解释说明由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言

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

即:

forward 的使用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)

实际上 。

?
1
module(data)

是等价于 。

?
1
module.forward(data)

forward 使用的解释

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

?
1
2
3
4
5
6
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__里调用其他的函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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()前向传播,只实列化后把参数传入.

定义模型

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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方法计算结果 。

?
1
2
3
4
5
6
7
class A():
  def __call__( self ):
   print ( 'i can be called like a function' )
 
a = A()
a()
>>>i can be called like a function

在__call__ 里可调用其它的函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

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

原文链接:https://blog.csdn.net/xu380393916/article/details/97280035 。

最后此篇关于pytorch 中forward 的用法与解释说明的文章就讲到这里了,如果你想了解更多关于pytorch 中forward 的用法与解释说明的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com