Pytorch:[类型错误:__init__()采用1个位置参数,但给出了2个]

zte4gxcn  于 2022-11-08  发布在  PyCharm
关注(0)|答案(2)|浏览(174)

我搜索了StackOverflow并访问了其他网站寻求帮助,但我无法找到解决我的问题的方法。我将把整个代码留给你,让你可以理解。它大约110行,用PyTorch写的。
每次编译和计算预测时,都会显示以下错误代码:

Traceback (most recent call last):
File "/Users/MacBookPro/Dropbox/01 GST h_da Privat/BA/06_KNN/PyTorchV1/BesucherV5.py", line 108, in <module>
result = Network(test_exp).data[0][0].item()
TypeError: __init__() takes 1 positional argument but 2 were given

我知道,其他用户也有这个问题,但他们的解决方案都没有帮助我。我猜这个错误要么是在我的类“网络”或变量“结果”。我希望你们中有人有这个问题,并知道如何解决它,或可以帮助我在不同的方式。
有关数据集的简短信息:
我的数据集有10列,被分成两个集合:X和Y。X有9列,Y只有一列。然后,这些数据集被用来训练网络。
先谢谢你!
谨致克里斯蒂安·里克特
我的代码:

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import torch.optim as optim
import pandas as pd

### Dataset ###

dataset = pd.read_csv('./data/train_data_csv.csv')

x_temp = dataset.iloc[:, :-1].values

print(x_temp)
print()
print(x_temp.size)
print()

y_temp = dataset.iloc[:, 9:].values

print(y_temp)
print()
print(y_temp.size)
print()

x_train_tensor = torch.FloatTensor(x_temp)
y_train_tensor = torch.FloatTensor(y_temp)

### Network Architecture ###

class Network(nn.Module):
    def __init__(self):
        super(Network, self).__init__()
        self.linear1 = nn.Linear(9, 9)  #10 Input-Neurons, 10 Output-Neurons, Linearer Layer
        self.linear2 = nn.Linear(9, 1)

    def forward(self, x):
        pax_predict = F.relu(self.linear1(x))
        pax_predict = self.linear2(x)
        return pax_predict

    def num_flat_features(self, pax_predict):
        size = pax_predict.size()[1:]
        num = 1
        for i in size:
            num *= i
        return num

network = Network()
print(network)

criterion = nn.MSELoss()
target = Variable(y_train_tensor)
optimizer = torch.optim.SGD(network.parameters(), lr=0.0001)

### Training

for epoch in range(200):
    input = Variable(x_train_tensor)
    y_pred = network(input)

    loss = criterion(y_pred, target)

    optimizer.zero_grad()

    loss.backward()
    optimizer.step()

test_exp = torch.Tensor([[40116]])

result = Network(test_exp).data[0][0].item()

print('Result is: ', result)
gab6jxml

gab6jxml1#

问题很简单,是在这一行,我想:

result = Network(test_exp).data[0][0].item()

这里应该使用network(对象)而不是Network(类)。正如您所定义的,Network只接受一个参数(即self),但您传递的是2:selftest_exp中的一个或多个。
如果您为对象选择了另一个名称(例如net),您可能会更容易发现此错误。请考虑这一点:)
请务必发布完整的追溯。

oprakyz7

oprakyz72#

我得到了同样的错误,然后我意识到我在传递ToTensor()变换时漏掉了括号。
错:

trainData = ImageFolder('data/in/train/', transform=ToTensor)

右:

trainData = ImageFolder('data/in/train/', transform=ToTensor())

一般来说,如果使用了函数名,但原型并不像预期的那样,则很可能会遇到这样的错误。

相关问题