如何在4维神经网络中使用视图



我是神经网络的新手,所以如果这真的是基本的东西,我希望你能原谅我。到目前为止,我在第一个非常简单的项目中使用了view一次,现在我试图理解更复杂的东西。

我在github上发现了这个代码,我正在努力理解它。

这就是网络的构建方式。

class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 32, 3, 1)
self.conv2 = nn.Conv2d(32, 64, 3, 1)
self.dropout1 = nn.Dropout(0.25)
self.dropout2 = nn.Dropout(0.5)
self.fc1 = nn.Linear(9216, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.conv1(x)
x = F.relu(x)
x = self.conv2(x)
x = F.relu(x)
x = F.max_pool2d(x, 2)
x = self.dropout1(x)
x = torch.flatten(x, 1)
x = x.view(-1, 64 * 12 * 12)
x = self.fc1(x)
x = F.relu(x)
x = self.dropout2(x)
x = self.fc2(x)
output = F.log_softmax(x, dim=1)
return output

我正在尝试获取无法识别的数字网络的图像,但我真的不知道如何在这里使用视图

def test(model, device, test_loader):
model.eval()
test_loss = 0
correct = 0
mistakes = 0
images, labels = next(iter(test_loader))
img = images[0].view(1, 784)
with torch.no_grad():
logps = model(img) 
for data, target in test_loader:
data, target = data.to(device), target.to(device)
output = model(data)
test_loss += F.nll_loss(output, target, reduction='sum').item()  
pred = output.argmax(dim=1, keepdim=True)  
correct += pred.eq(target.view_as(pred)).sum().item()
test_loss /= len(test_loader.dataset)
print('nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n'.format(
test_loss, correct, len(test_loader.dataset),
100. * correct / len(test_loader.dataset)))

我找不到有用的例子,所以如果能给我任何提示,我将不胜感激。

每次我修改它时,都会出现这两个错误中的一个。内置程序运行时错误:4维权重[32,1,3,3]需要4维输入,但得到的却是尺寸[1784]的2维输入

内置程序运行时错误:形状"[1784,3,3]"对于784大小的输入无效

提前感谢您的任何帮助。

这样做
因为您的dataloader已经在4D中有数据了。无需使用.view()
并且您的CNN期望4D中的数据

def test(model, device, test_loader):
model.eval()
test_loss = 0
correct = 0
mistakes = 0
"""  NO NEED OF THIS 
images, labels = next(iter(test_loader))
img = images[0].view(1, 784)  # This makes your image to 1D
"""
with torch.no_grad():
#logps = model(img) 
for data, target in test_loader:
data, target = data.to(device), target.to(device)
output = model(data)
test_loss += F.nll_loss(output, target, reduction='sum').item()  
pred = output.argmax(dim=1, keepdim=True)  
correct += pred.eq(target.view_as(pred)).sum().item()
test_loss /= len(test_loader.dataset)
print('nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n'.format(
test_loss, correct, len(test_loader.dataset),
100. * correct / len(test_loader.dataset)))

最新更新