原因是没有实例化网络,直接调用类来进行forward。
神经网络构建的开头部分:
class AutoEncoder(nn.Module): def __init__(self): super(AutoEncoder, self).__init__()
正常实例化一个简单的神经网络应下面这样的,注意是没有参数的,这和__init__是一样的,或者只有一个self参数:
auto=AutoEncoder()
如果把类当成 了对象直接调用,就会是这样:
out=AutoEncoder(input)
上面这种情况就是给类的实例化传进来两个参数,一个是self,一个是input。所以会报错需要一个参数,缺给了两个。这样的报错方式虽然是正确的,但是会让没有经验的人一头雾水,不经过分析很难想到是误把类当成了对象使用。但是python的语法就是这样设计的,如果是显式的类型就可以是这样的:
out:torch.FloatTensor=AutoEncoder(input)
这样的话,如果IDE的推断足够智能,不用运行的情况下IDE就可以推断出来左右两边类型不一致,而且能给出准确的说明。看来python的错误提示确实需要人思考一下,经常会遇到的错误提示感觉和自己写的项目关系都不大的情况,也是和错误提示关系不大的一种改正操作,代码可以跑了。这里的关系不大指的是关系隔了好几层。如果IDE和python能更加智能的推断和错误提示,就更棒了!