【问题标题】:PyTorch NotImplementedErrorPyTorch NotImplementedError
【发布时间】:2022-08-04 05:21:44
【问题描述】:

我一直在编写代码来训练和测试图像数据集。但是我在每个实例中都会收到此错误输出 = 模型(图像)

class ConvNeuralNet(nn.Module):
#  Determine what layers and their order in CNN object 
def __init__(self, num_classes):
    super(ConvNeuralNet, self).__init__()
    self.conv_layer1 = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3)
    self.conv_layer2 = nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3)
    self.max_pool1 = nn.MaxPool2d(kernel_size = 2, stride = 2)
    
    self.conv_layer3 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3)
    self.conv_layer4 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3)
    self.max_pool2 = nn.MaxPool2d(kernel_size = 2, stride = 2)
    
    self.fc1 = nn.Linear(1600, 128)
    self.relu1 = nn.ReLU()
    self.fc2 = nn.Linear(128, num_classes)


for i, (images, labels) in enumerate(train_loader):  
    # Move tensors to the configured device
    device = torch.device(\'cpu\')
    images = images.to(device)
    labels = labels.to(device)
    # Forward pass
    outputs = model(images)
    loss = criterion(outputs, labels)
    # Backward and optimize
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    print(\'Epoch [{}/{}], Loss: {:.4f}\'.format(epoch+1, num_epochs, loss.item()))

/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _forward_unimplemented(self, *input) 199 registered hooks while the latter silently ignores them. 200 \"\"\" --> 201 raise NotImplementedError 202 203

未实现错误: 我已经检查过没有缩进错误,所以我不明白这里出了什么问题。

    标签: python deep-learning pytorch


    【解决方案1】:

    当你继承nn.Module 时,你需要实现一个forward() 方法。

    这是您的 ConvNeuralNet 课程的更新:

    class ConvNeuralNet(nn.Module):
      #  Determine what layers and their order in CNN object 
      def __init__(self, num_classes):
        super(ConvNeuralNet, self).__init__()
        self.conv_layer1 = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3)
        self.conv_layer2 = nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3)
        self.max_pool1 = nn.MaxPool2d(kernel_size = 2, stride = 2)
        
        self.conv_layer3 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3)
        self.conv_layer4 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3)
        self.max_pool2 = nn.MaxPool2d(kernel_size = 2, stride = 2)
        
        self.fc1 = nn.Linear(1600, 128)
        self.relu1 = nn.ReLU()
        self.fc2 = nn.Linear(128, num_classes)
      
      ## UPDATE: Implement forward() method
      def forward(self, x):
        # First three layers (from above)
        x = self.conv_layer1(x)
        x = self.conv_layer2(x)
        x = self.max_pool1(x)
    
        # Next three layers
        x = self.conv_layer3(x)
        x = self.conv_layer4(x)
        x = self.max_pool2(x)
    
        # Final three layers
        x = self.fc1(x)
        x = self.relu1(x)
        x = self.fc2(x)
        return x
    

    请注意x(输入数据)如何通过您定义的每一层并最终返回。

    来自documentation for nn.Module

    forward(*input)

    定义每次调用时执行的计算。

    应该被所有子类覆盖。

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2019-02-13
      • 2021-08-21
      • 1970-01-01
      • 2019-09-19
      • 2020-06-03
      相关资源
      最近更新 更多