RuntimeError:PyTorch中的大小不匹配

时间:2019-09-04 17:43:21

标签: deep-learning conv-neural-network pytorch relu

我刚刚启动pyTorch并收到以下错误: RuntimeError: size mismatch, m1: [128 x 256], m2: [400 x 120] at /pytorch/aten/src/THC/generic/THCTensorMathBlas.cu:268 我正在MNIST数据集上尝试LeNet体系结构。我正在尝试各种激活功能,虽然Tanh并没有出现此错误,但ReLU激活却出现了此错误。所以我想我为ReLU写的代码错了。 型号:

class LeNet(nn.Module):
    def __init__(self): 
        super(LeNet, self).__init__()
        self.cnn_model = nn.Sequential(
            nn.Conv2d(1, 6, 5),         
            nn.ReLU(True),
            nn.AvgPool2d(2, stride=2),  
            nn.Conv2d(6, 16, 5),        
            nn.ReLU(True),
            nn.AvgPool2d(2, stride=2)  
        )
        self.fc_model = nn.Sequential(
            nn.Linear(400,120),        
            nn.ReLU(True),
            nn.Linear(120,84),          
            nn.ReLU(True),
            nn.Linear(84,10)            
        )

    def forward(self, x):
        print(x.shape)
        x = self.cnn_model(x)
        print(x.shape)
        x = x.view(x.size(0), -1)
        print(x.shape)
        x = self.fc_model(x)
        print(x.shape)
        return x

我将批次大小保持为128:

数据导入:

batch_size = 128
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transforms.ToTensor())
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size, shuffle=True)
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transforms.ToTensor())
testloader = torch.utils.data.DataLoader(testset, batch_size=batch_size, shuffle=False)

评估和优化模型:

 def evaluation(dataloader):
        total, correct = 0, 0
        for data in dataloader:
            inputs, labels = data
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = net(inputs)
            _, pred = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (pred == labels).sum().item()
        return 100 * correct / total


import torch.optim as optim

net = LeNet().to(device)
loss_fn = nn.CrossEntropyLoss()
opt = optim.Adam(net.parameters())

max_epochs = 16
for epoch in range(max_epochs):

    for i, data in enumerate(trainloader, 0):

        inputs, labels = data
        inputs, labels = inputs.to(device), labels.to(device)

        opt.zero_grad()

        outputs = net(inputs)
        loss = loss_fn(outputs, labels)
        loss.backward()
        opt.step()

    print('Epoch: %d/%d' % (epoch, max_epochs))

我看到了一些较早的问题,但无法理解如何修改ReLU

0 个答案:

没有答案