TypeError: ‘mlp’ object is not callable
- 翻译
类型错误:“xxx"对象不可调用
一、分析原因
这句话的重点在于:调用.我们想python能调用什么东西呢?或着说什么东西才可以完成调用这个动作?目前,我已知的是:函数(或类中的方法)、Module
二、类调用出错的情况
class mlp(object):
def __init__(self,a,b):
self.A = a
self.B = b
def forward (self, x) :
return self.A *x +self.B
调用
fun = mlp(2,3) # 表示实例化一个2x+3的一个元一次函数
y=fun(2)
- 报错:
我们套用上面思路
猜测一:猜测fun不是函数才不能被调用。
print(type(fun))
结果:<class '__main__.mlp'>
是一个类
我们希望的是调用类中的forward函数,故修改为
fun.forward(2)
结果:7 (未曾报错)
- 验证猜想
print(type(fun.forward))
out: <class 'method'>
众所周知,类中的方法等同于函数
猜测二:猜测二不是Module才不能调用
修改
import torch.nn as nn
class m(nn.Module):
def __init__(self,a,b):
super(m, self).__init__()
##采用nn.Module的方式初始化
self.A = a
self.B = b
def forward (self, x) :
return self.A *x +self.B
调用
f = m(2,3)
f(2)
out:7
完美解决!
三、字符串调用出错的情况
四、模块导入出错的情况
https://www.freesion.com/article/18881185139/