Rainbow
Rainbow

Reputation: 301

parameters() missing 1 required positional argument: 'self' even after instantinating model

I'm trying to one time run my model and see if it's working. I've searched the error and suggested answers was to instantiate the model once. I already did that. However, even after instantiating the model. it gives an error once requesting access to model parametes. What's the problem?

import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import DataLoader, TensorDataset

from sklearn.model_selection import train_test_split

import matplotlib.pyplot as plt
from IPython import display
display.set_matplotlib_formats('svg')



data  = np.array([[1,1]])
label = np.array([2])

for i in range(-50,51,1):
  data = np.append(data, [[i,i]], axis=0)
  label = np.append(label, [i+i])




# conver to tensor

T_data  = torch.tensor(data).float()
T_label = torch.tensor(label).long()



# split data

train_data, test_data, train_label, test_label = train_test_split(T_data, T_label, test_size= .2)

# convert into Pytorch dataset

train_data = TensorDataset(train_data, train_label)
test_data  = TensorDataset(test_data, test_label)

# translate into dataloader

batchsize = 32

train_loader = DataLoader(train_data, batch_size= batchsize, shuffle =True, drop_last=True)
test_loader  = DataLoader(test_data, batch_size=test_data.tensors[0].shape[0])


  class AddNN(nn.Module):
    def __init__(self):
      super().__init__()

      self.input = nn.Linear(2,16)

      ## hidden layer
      self.fc1 = nn.Linear(16,32)
      self.fc2 = nn.Linear(32,1)

      #output layer
      self.output = nn.Linear(1,1)

      # forward pass

      def forward(self, x):
        x = F.relu(self.input(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        return self.output(x)


net =AddNN()
lossfun = nn.MSELoss()
optimizer = torch.optim.Adam(AddNN.parameters(), lr = .05)

It returns TypeError: parameters() missing 1 required positional argument: 'self' What it means to have missing a required positional argument here??

Upvotes: 0

Views: 1590

Answers (1)

TQCH
TQCH

Reputation: 1232

After model instantiation, you should use that model object instead of the model class inside Adam and with .parameters()

net = AddNN()
lossfun = nn.MSELoss()
optimizer = torch.optim.Adam(net.parameters(), lr = .05)

Upvotes: 1

Related Questions