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

Posted Dukixytapoo.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了亲测已解决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)

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


解决TypeError: __init__() missing 1 required positio

解决TypeError: __init__() missing 1 required positional argument: 'on_delete'

试用Djiango的时候发现执行mange.py makemigrations 和 migrate是会报错,少位置参数on_delete,查了一下是因为指定外键的方式不对,改一下就OK了。
代码如下:


from django.db import models# Create your models here.class BookInfo(models.Model):    """model of book infomation"""    # 书的标题 字符串类型  最大长度20    btitle = models.CharField(max_length=20)    # 出版日期 日期类型    bpub_date = models.DateTimeField()class HeroInfo(models.Model):    """model of hero information"""    # 字符串类型 最大长度30    hname = models.CharField(max_length=30)    # 性别 布尔类型    hgender = models.BooleanField()    # 内容 字符串类型 最大长度1000    hcontent = models.CharField(max_length=1000)    # 一对多设计 多方持有一方的外键     hbook = models.ForeignKey(BookInfo)




解决方法:

   # 一对多设计 多方持有一方的外键
    # hbook = models.ForeignKey(BookInfo)
    hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)


以上是关于亲测已解决TypeError: __init__() takes 1 positional argument but 2 were given的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: __init__() 接受 2 个位置参数,但给出了 4 个

TypeError: __init__() 接受 1 个位置参数,但给出了 3 个

TypeError:__init__() 得到了一个意外的关键字参数“categorical_features”:onehotencoder

Python报错:TypeError: __init__() got an unexpected keyword argument 'io_loop' 原因及解决方案

TypeError:__ init __()占用1个位置参数,但给出3个

执行python manage.py makemigrations时报错TypeError: __init__() missing 1 required positional argument: &#