【亲测已解决】TypeError: __init__() takes 1 positional argument but 2 were given


问题描述

自学pytorch进行搭建神经网络并尝试训练时,出现了Pytorch报错TypeError : init() takes 1 positional argument but 2 were given,然后网上查了很多原因,主要如下:

1、神经网络模型定义错误或没有实例化(非本人错误原因),参考链接如下

http://t.csdn.cn/YuJ9m

2、类初始化定义中把__init__打成了__int__(非本人错误原因),参考链接如下

http://t.csdn.cn/peSOQ

3、__init__少传了参数(非本人错误原因),参考链接如下

http://t.csdn.cn/L0wWT

发现上述都不是我产生该错误的原因后,又仔细核查代码


原因分析:

最终发现了导致出现init() takes 1 positional argument but 2 were given的原因,也是由于自身代码书写错误的原因导致的,具体如下:

for i in range(epoch):
    print("-------第{}轮训练开始-------".format(i+1))
    tudui.train()
    #训练步骤开始
    for data in train_dataloader:    #------------>!!!!!!!报错代码位置
        imgs, targets = data
        if torch.cuda.is_available():
            # 图像cuda;标签cuda
            # 训练集和测试集都要有
            imgs = imgs.cuda()
            targets = targets.cuda()

发现代码报错位置在for data in train_dataloader: 这里,但是书写确实没啥问题

找了好久终于发现在进行数据加载的时候transform=torchvision.transforms.ToTensor出现书写错误掉了"()"。

正确的应该为transform=torchvision.transforms.ToTensor(),如下:

#错误语法  torchvision.transforms.ToTensor
train_data = torchvision.datasets.CIFAR10(root="../data",train=True,transform=torchvision.transforms.ToTensor,
                                          download=False)
test_data = torchvision.datasets.CIFAR10(root="../data",train=False,transform=torchvision.transforms.ToTensor,
                                         download=False)

#正确语法  torchvision.transforms.ToTensor()
train_data = torchvision.datasets.CIFAR10(root="../data",train=True,transform=torchvision.transforms.ToTensor(),
                                          download=False)
test_data = torchvision.datasets.CIFAR10(root="../data",train=False,transform=torchvision.transforms.ToTensor(),
                                         download=False)

至此问题完美解决!!!!!!!!!!!!!!!!!!


物联沃分享整理
物联沃-IOTWORD物联网 » 【亲测已解决】TypeError: __init__() takes 1 positional argument but 2 were given

发表评论