【疑问解答】【Pytorch】pytorch.nn.Module类的__call__

【Pytorch】【疑问解答】jtorch.nn.Module类的__call__,子类继承

问题描述

transforms.RandomCrop类里没有__call__函数,为什么可以调用sun_object(x)语句?【sun_object表示子类实例化的对象】

问题解答

transforms.RandomCrop类里并没有__call__函数,但是其继承torch.nn.Module,父类Module中有__call__方法,因此sun_object(x)这条语句可以正常执行。

# torch/nn/modules/module.py
......
class Module:
	......
	
	def _call_impl(self, *input, **kwargs):
	......
	__call__ : Callable[, Any] = _call_impl
	......

但是Module类中并没有直接给出__call__的实现体,而是__call__后紧跟冒号,此冒号表示类型注解;后面的CallableAny是typing模块中的,Callable表示可调用类型,即等号右边应该是一个可调用类型,此处指的是_call_impl;Any是一种特殊的类型,它与所有类型兼容;Callable[…, Any]表示_call_impl可接受任意数量的参数并返回Any。这里__call__实际指向了_call_impl函数,因此调用__call__实际是调用_call_impl

参考

1.PyTorch中nn.Module类中__call__方法介绍_fengbingchun的博客-程序员秘密__call_impl
2.探究PyTorch中model(image)会自动调用forward函数?

3.Python 中 typing 模块和类型注解的使用
4.Python3中typing模块介绍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值