【问题标题】:Pytorch tutorial code error: "NameError: name 'net' is not defined"Pytorch 教程代码错误:“NameError: name 'net' is not defined”
【发布时间】:2021-04-06 05:22:11
【问题描述】:

代码来自tutorial for PyTorch。我正在使用 Google Collabs notebook 来运行代码。

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())

错误是:

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

教程说输出应该是这样的:

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

在我看来 net 已定义,所以我不清楚为什么会发生此错误。我一开始就不是 Python 专家,所以我可能缺少一些明显的东西。

【问题讨论】:

  • 有缩进的行,不应该这样。 “net”永远不会在您的代码中创建。
  • 它是在你的类中定义的。修复缩进
  • 删除 net = Net() 的缩进。您正在一个类中定义它。它是该类的局部变量

标签: python pytorch nameerror


【解决方案1】:

您的缩进意味着这些行:

  net = Net()
  print(net)

Net 类的一部分,因为它们与类定义在同一范围内。

将它们移到该类定义之外(即,删除这些行的空白缩进),它应该可以工作。

我还建议使用四个空格而不是两个空格的缩进,以使 Python 的空格更易于扫描。

【讨论】:

  • 感谢关于缩进的建议。
【解决方案2】:

你需要在Net类之外写下如下语句-

net = Net()
print(net)

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 2022-11-27
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多