TypeError: __init__() takes 1 positional argument but 2 were given
在网上阅读了大量的博文。基本上都是因为没有实例化对象而导致的错误。如果没有实例化对象,或者压根就不知道自己有没有实例化对象的小伙伴们可以点击以下博文:
Pytorch报错TypeError : init() takes 1 positional argument but 2 were given 原因及解决方法
或者是因为少传了参数,导致参数个数不匹配。
因为参数个数不匹配而报错
但是,博主我的问题却不是这两个。我的源代码如下:
import torch
import torch.utils.data as data_utils
import torchvision.datasets as dataset
import torchvision.transforms as transforms# data
# 手写数字数据集的下载
train_data = dataset.MNIST(root="mnist",train=True,transform=transforms.ToTensor,download=True)
test_data = dataset.MNIST(root="mnist",train=False, # 不下载数据集transform=transforms.ToTensor,download=False)# batchsize
# 要真正理解batchSize的含义,以及为什么要使用train_loader 和test_loader
# dataloader可以完成对数据重复的,成千上万次读取
train_loader = data_utils.DataLoader(dataset=train_data,batch_size=64, #shuffle=True, # 打乱数据)test_loader = data_utils.DataLoader(dataset=test_data,batch_size=64, #shuffle=True, # 打乱数据)# 网络定义:
class MYCNN(torch.nn.Module):def __init__(self):super(MYCNN, self)# 使用序列定义self.conv = torch.nn.Sequential(torch.nn.Conv2d(1, 32, kernel_size=5, padding=2),torch.nn.BatchNorm2d(32),torch.nn.ReLU(),torch.nn.MaxPool2d(2))# 输入的大小是经过第一轮卷积之后的大小。# 输入的图像是28 *28 但经过pooling后会变为14*14# 32是32个通道# 10是输出self.fc = torch.nn.Linear(14 * 14 * 32, 10)def forward(self, x):# print("TAG01:", x.shape)out = self.conv(x)# 在pytorch中tensor是N*C*H*W# 我们需要将其拉成一个向量# print("TAG02:", out.shape)out = out.view(out.size()[0], -1)# print("TAG03:", out.shape)out = self.fc(out)# print("TAG04:", out.shape)return out# 实例化对象
cnn = MYCNN()
print("网络结构:", cnn)
cnn = cnn.cuda()
batch_size = 64# loss
loss_func = torch.nn.CrossEntropyLoss()# optimizer
optimizer = torch.optim.Adam(cnn.parameters(), lr=0.01)# training 每次在训练时采用mini-batch的策略进行数据的读取和训练
for epoch in range(10): # 整个数据集过10遍for i, (images, labels) in enumerate(train_loader):images = images.cuda() # 把images放到cudalabels = labels.cuda()outputs = cnn(images)# 计算lossloss = loss_func(outputs, labels)optimizer.zero_grad()loss.backward()optimizer.step()print("epoch is{}, 迭代次数是{}/{},loss is{}".format(epoch + 1, i, len(train_data) // batch_size, loss.item()))# eval/testloss_test = 0accuracy = 0for i, (images, labels) in enumerate(test_loader):images = images.cuda() # 把images放到cudalabels = labels.cuda()outputs = cnn(images)# 计算loss# outputs = batchsize *cls_numloss_test += loss_func(outputs, labels)# 统计概率最大的对应的数字_, pred = outputs.max(dim=1)#print("预测的数字",pred)accuracy = (pred == labels).sum().item()accuracy = accuracy / len(test_data)loss_test = loss_test / (len(test_data) // 64)print("epoch is {},accuracy is {},loss is {}".format(epoch + 1, accuracy, loss_test.item()))# 保存文件
torch.save(cnn, "model_by_myself.pkl")
我自己对比了大量的文件后,终于发现在以下三个地方出现问题了。
改正后的代码:
# 手写数字数据集的下载
train_data = dataset.MNIST(root="mnist",train=True,transform=transforms.ToTensor(),download=True)
test_data = dataset.MNIST(root="mnist",train=False, # 不下载数据集transform=transforms.ToTensor(),download=False)
# 网络定义:
class MYCNN(torch.nn.Module):def __init__(self):super(MYCNN, self).__init__()# 使用序列定义self.conv = torch.nn.Sequential(torch.nn.Conv2d(1, 32, kernel_size=5, padding=2),torch.nn.BatchNorm2d(32),torch.nn.ReLU(),torch.nn.MaxPool2d(2))# 输入的大小是经过第一轮卷积之后的大小。# 输入的图像是28 *28 但经过pooling后会变为14*14# 32是32个通道# 10是输出self.fc = torch.nn.Linear(14 * 14 * 32, 10)def forward(self, x):# print("TAG01:", x.shape)out = self.conv(x)# 在pytorch中tensor是N*C*H*W# 我们需要将其拉成一个向量# print("TAG02:", out.shape)out = out.view(out.size()[0], -1)# print("TAG03:", out.shape)out = self.fc(out)# print("TAG04:", out.shape)return out
TypeError: __init__() takes 1 positional argument but 2 were given相关推荐
- TypeError: __init__() takes 1 positional argument but 4 were given
执行如下代码的时候报错: import torch import torch.nn as nn N,D_in,H,D_out=64,1000,100,10 x=torch.randn(N,D_in) ...
- 问题TypeError: __init__() takes 1 positional argument but 2 were given解决方案
问题TypeError: __init__() takes 1 positional argument but 2 were given解决方案 参考文章: (1)问题TypeError: __ini ...
- TypeError: __init__() takes 1 positional argument but 5 were given
解决问题:TypeError: init() takes 1 positional argument but 5 were given 笔者在初学用python连接MySQL数据库时,遇到了报错,后来 ...
- 【报错记录】TypeError: __init__() takes 1 positional argument but 4 were given
找了好久的错误,结果竟然就是少写了个i 改成
- __init__() takes 1 positional argument but 5 positional arguments (and 1 keyword-only argument) were
百度翻译:__init__()接受1个位置参数,但使用了5个位置参数(和1个仅限关键字的参数) 问题:将python文件打包成bat文件,运行bat文件报错:__init__() takes 1 po ...
- 遇到的问题记录:__init__() takes 1 positional argument but 2 were given
深度学习初步接触模型建立的过程中遇到一点问题:如果不是实例化模型,而直接调用,就会报如题错误,具体代码如下 from torch import nn import torchclass Xi(nn.M ...
- TypeError: xx takes 1 positional argument but 4 were given
问题出线程传递数据的时候出错的,例如下面这句话运行的时候就会报错 threading.Thread(target=intent, args=([1, 2, 3, 4])).start() 处理方法就是 ...
- TypeError:proces_thread() takes 1 positional argument but 5 were given
看报错的地方 发现是target()里面的内容写错了 把这个逗号加上问题就解决了
- 【吭】django项目运行jira项目突然报错TypeError: session() takes 1 positional argument but 2 were given
在linux重新部署时,pip install jira 默认安装最新版本3.0,导致项目运行时报错如下: 解决办法,卸载jira库,重新安装指定版本: 也可以修改代码使用最新的jira库.
最新文章
- 经济独立,是你最大的底气
- SQL重要知识点梳理!
- 小孩子如何学会语言?科学家使用计算机模型解释儿童语言学习过程
- 机器人会消灭人类统治世界?你TM是在逗我么
- 微信支付现金红包接口(转)
- Memory Management in AIR / AS3 / Flash Garbage Collection.
- MyBatis动态SQL的List传值错误
- 经典推荐:08年草根站长现状360度总结分析
- canvas里图像拖拽操作
- python的安装以及使用和文本编译器的安装使用
- 红旗liuxe5.0下vmware tools安装记录
- windowsR2(流媒体服务器)
- 嵌入式开发—C语言面试题
- 基于javaweb+mysql的超市进销存管理系统(java+SpringBoot+Html+Layui+echarts+mysql)
- [书籍翻译]12周撰写期刊文章 学术出版成功指南——第 7 周:出示证据
- android波浪动画简书,Android Path绘制贝塞尔曲线波浪动画
- 如何开搓饵不掉钩_为什么你开的搓饵总是无鱼咬钩?记住这4点,搓饵比拉饵效果更好...
- 一体机怎么修复音频服务器,导航一体机收音机信号不好?最全的自己动手修复教程来了!...
- OLAP、OLTP的介绍和比较
- html中移动端遮罩层,移动端微信分享弹出遮罩层js效果_蓝戒的博客