【问题标题】:Pytorch CNN NotImplementedErrorPytorch CNN NotImplementedError
【发布时间】:2021-03-15 02:37:22
【问题描述】:

这是我的网络类:

class network(nn.Module):
    def __init__(self):
        super(network, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, 3, stride=1, padding=1, padding_mode='zeros')
        self.conv2 = nn.Conv2d(32, 32, 3, stride=1, padding=1, padding_mode='zeros')
        self.conv3 = nn.Conv2d(32, 64, 3, stride=1, padding=1, padding_mode='zeros')
        self.conv4 = nn.Conv2d(64, 64, 3, stride=1, padding=1, padding_mode='zeros')
        self.maxpool1 = nn.MaxPool2d(2)     # 14 * 14
        self.conv5 = nn.Conv2d(64, 128, 3, stride=1, padding=1, padding_mode='zeros')
        self.conv6 = nn.Conv2d(128, 128, 3, stride=1, padding=1, padding_mode='zeros')
        self.conv7 = nn.Conv2d(128, 256, 3, stride=1, padding=1, padding_mode='zeros')
        self.conv8 = nn.Conv2d(256, 256, 3, stride=1, padding=1, padding_mode='zeros')
        self.maxpool2 = nn.MaxPool2d(2)     # 7 * 7
        self.gap = nn.AvgPool2d(7)
        self.fc1 = nn.Linear(256 * 1 * 1, 256)
        self.fc2 = nn.Linear(256, len(classes))

    def foward(self, x):
        x = torch.nn.ReLU(self.conv1(x))
        x = torch.nn.ReLU(self.conv2(x))
        x = torch.nn.ReLU(self.conv3(x))
        x = torch.nn.ReLU(self.conv4(x))

        x = self.maxpool1(x)

        x = torch.nn.ReLU(self.conv5(x))
        x = torch.nn.ReLU(self.conv6(x))
        x = torch.nn.ReLU(self.conv7(x))
        x = torch.nn.ReLU(self.conv8(x))

        x = self.maxpool2(x)
        x = self.gap(x)
        x = torch.nn.ReLU(self.fc1(x))
        x = torch.nn.Softmax(self.fc2(x))
        print(f"output shape: {x.shape}")

        return x

主要代码

network = network()
print(network)
loss = nn.CrossEntropyLoss().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-5)

for epoch in range(nb_epochs + 1):
    iter = -1
    for batch_index, sample in enumerate(dataloader):
        x_train, y_train = sample

        # Upload Dataset in GPU device
        X = x_train.to(device, dtype=torch.float)
        Y = y_train.to(device, dtype=torch.long)

        optimizer.zero_grad()
        output = network(X)
        cost = loss(output, torch.max(Y, 1)[1])
        cost.backward()
        optimizer.step()
        iter = iter + 1

        if iter % 100 == 99 or iter == dataloader.__len__():
            print(f"Epoch {epoch + 1}/{nb_epochs}   "
                  f"Iteration {iter + 1}/{dataloader.__len__()}     "
                  f"Loss {str(float(cost))[0:7]}")

print('Finished Training')

PATH = './cifar10_vgg.pth'
torch.save(model.state_dict(), PATH)

并显示错误:

Traceback (most recent call last):
    File "D:/Files/works/0+Development/Python/0+DNN/0+torch_dc/tutorial_train_save.py", line 198, in <module>
        output = network(X)
    File "C:\Users\bolero\anaconda3\lib\site-packages\torch\nn\modules\module.py", line 727, in _call_impl
        result = self.forward(*input, **kwargs)
    File "C:\Users\bolero\anaconda3\lib\site-packages\torch\nn\modules\module.py", line 175, in _forward_unimplemented
        raise NotImplementedError
NotImplementedError

我刚刚用 Pytorch 实现了一个非常简单的网络,但它不起作用。

我分别写了“init”函数和forward函数。

我观看了 pytorch 教程,并在该教程中编写了类似的代码。

我知道的是,在写网络类的时候,应该继承nn.Module并创建init和转发函数。

我知道init函数定义层类型,forward函数定义实际操作部分。

如果有人知道这个问题,请发表评论。

【问题讨论】:

  • 函数名中好像有一个类型:forward.

标签: deep-learning pytorch


【解决方案1】:

注意def foward(self, x):中的错字,应该是def forward(self, x):。

【讨论】:

    猜你喜欢
    • 2022-08-04
    • 2019-02-13
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多