【问题标题】:Pytorch: [TypeError: __init__() takes 1 positional argument but 2 were given]Pytorch:[TypeError: __init__() 接受 1 个位置参数,但给出了 2 个]
【发布时间】:2020-01-24 21:42:08
【问题描述】:

我搜索了 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)

【问题讨论】:

  • 欢迎堆栈溢出! edit 你的帖子包含完整的错误回溯,而不是最后一行
  • 谢谢!对不起,我不知道。我现在会这样做,并在以后的帖子中。谢谢!

标签: python csv neural-network pycharm pytorch


【解决方案1】:

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

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

这里你应该使用network(对象)而不是Network(类)。正如您所定义的,Network 只接受 1 个参数(即 self),但您传递了 2 个参数:selftest_exp

也许如果您为对象选择了另一个名称(例如,net),您会更容易发现此错误。考虑到这一点:)

请务必发布完整的回溯。

【讨论】:

  • 非常感谢!我想你是对的,不同的命名在这里会有所帮助。我以后会这样做的。
猜你喜欢
  • 2017-04-22
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 2023-03-03
  • 2015-07-13
  • 2018-06-21
相关资源
最近更新 更多