Pytorch class 中forward方法和__call__方法(前向传播)

要学习pytorch,一个前提是 知道python calss中的__call__和__init__方法.
简单的说就是:

_init_: 类的初始化函数,类似于c++的构造函数。

_call_: 使得类对象具有类似函数的功能。

__init__比较好理解,现在主要看一下 __call__的功能示例:

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

out:

i can be called like a function

让我们在调用时传入参数如何?

class A():
    def __call__(self, param):
        
        print('i can called like a function')
        print('掺入参数的类型是:', type(param))
 
 
a = A()
 
 
a('i')

out:

i can called like a function
掺入参数的类型是: <class ‘str’>

发现对象a的表现完全类似一个函数。

那当然也可以在__call__里调用其他的函数啊,

在__call__函数中调用forward函数,并且返回调用的结果:

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

现在我们将初始化函数__init__也加上,来看一下:
在对象初始化时确定初始年龄,通过调用a(2)为对象年龄增加2岁。

class A():
    def __init__(self, init_age):
        super().__init__()
        print('我年龄是:',init_age)
        self.age = init_age
 
    def __call__(self, added_age):
        
 
        res = self.forward(added_age)
        return res
 
    def forward(self, input_):
        print('forward 函数被调用了')
        
        return input_ + self.age
print('对象初始化。。。。')
a = A(10)
 
 
input_param = a(2)
print("我现在的年龄是:", input_param)

out:

对象初始化。。。。
我年龄是: 10
forward 函数被调用了
我现在的年龄是: 12

pytorch主要也是按照__call__, _init_, forward三个函数实现网络层之间的架构的

首先创建类对象m,然后通过m(input)实际上调用__call__(input),然后__call__(input)调用
forward()函数

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值