Search code examples
pythonpytorchnameerror

Pytorch tutorial code error: "NameError: name 'net' is not defined"


The code comes from a tutorial for PyTorch. I'm using Google Collabs notebook to run the code.

import torch
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):

  def __init__(self):
    super(Net, self).__init__()
    self.conv1 = nn.Conv2d(1, 6, 3)
    self.conv2 = nn.Conv2d(6, 16, 3)
    self.fc1 = nn.Linear(16 * 6 * 6, 120)
    self.fc2 = nn.Linear(120, 84)
    self.fc3 = nn.Linear(84, 10)

  def forward(self, x):
    x = F.max_pool2d(F.relu(self.conv1(x)), (2,2))
    x = F.max_pool2d(F.relu(self.conv2(x)), 2)
    x = x.view(-1, self.num_flat_features(x))
    x = F.relu(self.fc1(x))
    x = F.relu(self.fc2(x))
    x = self.fc3(x)
    return x
  
  def num_flat_features(self, x):
    size = x.size()[1:]
    num_features = 1
    for s in size:
      num_features *= s
    return num_features
  
  net = Net()
  print(net)

# The code works up until here. It's the following chunk that returns an error. 
params = list(net.parameters())
print(len(params))
print(params[0].size())

The error is:

NameError                                 Traceback (most recent call last)

<ipython-input-17-ad79a1eff4f3> in <module>()
     32   print(net)
     33 
---> 34 params = list(net.parameters())
     35 print(len(params))
     36 print(params[0].size())

NameError: name 'net' is not defined

The tutorial says the output should be this instead:

10
torch.Size([6, 1, 3, 3])

It looks to me like net is defined, so I'm unclear why this error is happening. I'm not expert with Python to begin with, so maybe there is something obvious I'm missing.


Solution

  • Your indentation implies that these lines:

      net = Net()
      print(net)
    

    are part of the Net class because they are in the same scope as the class definition.

    Move them outside of that class definition (ie, remove the whitespace indentation for those lines) and it should work.

    I'd also suggest moving to indentations with four spaces, not two, to make Python's whitespace easier to scan.