首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pytorch CNN NotImplementedError

Pytorch CNN NotImplementedError
EN

Stack Overflow用户
提问于 2020-12-03 04:22:39
回答 1查看 852关注 0票数 0

这里是我的网络类:

代码语言:javascript
复制
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

主代码

代码语言:javascript
复制
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)

和错误显示:

代码语言:javascript
复制
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“函数和前进函数。

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

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

我知道init函数定义了层类型,而前向函数定义了实际操作部分。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-03 13:47:36

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65119889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档