这里是我的网络类:
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“函数和前进函数。
我看了pytorch教程,并在该教程中编写了类似的代码。
我知道的是,在编写网络类时,我应该继承nn.Module并创建init和转发函数。
我知道init函数定义了层类型,而前向函数定义了实际操作部分。
如果有人知道这个问题,请评论。
发布于 2020-12-03 13:47:36
注意def foward(self, x):中的错误,它应该是def forward(self, x):。
https://stackoverflow.com/questions/65119889
复制相似问题