使用pytorch神经网络时报错TypeError: __init__() takes 1 positional argument but 2 were given的可能原因和分析

原因是没有实例化网络,直接调用类来进行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能更加智能的推断和错误提示,就更棒了!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

York1996

您的打赏,是我更新的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值