RuntimeError:大小不匹配

时间:2018-12-18 07:53:46

标签: python-3.x image-processing machine-learning pytorch google-colaboratory

有人可以帮我吗?我正在错误以下。我使用Google Colab。如何解决此错误??

  

大小不匹配,在/pytorch/aten/src/TH/generic/THTensorMath.cpp:2070处,m1:[64 x 100],m2:[784 x 128]

下面的代码我正在尝试运行。

    import torch
    from torch import nn
    import torch.nn.functional as F
    from torchvision import datasets, transforms

    # Define a transform to normalize the data
    transform = 
    transforms.Compose([transforms.CenterCrop(10),transforms.ToTensor(),])
    # Download the load the training data
    trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, 
    train=True, transform=transform)
    trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, 
    shuffle=True)

    # Build a feed-forward network
    model = nn.Sequential(nn.Linear(784, 128),nn.ReLU(),nn.Linear(128, 
    64),nn.ReLU(),nn.Linear(64, 10))

    # Define the loss
    criterion = nn.CrossEntropyLoss()

   # Get our data
   images, labels = next(iter(trainloader))
   # Faltten images
   images = images.view(images.shape[0], -1)

   # Forward pass, get our logits
   logits = model(images)
   # Calculate the loss with the logits and the labels
   loss = criterion(logits, labels)
   print(loss)

2 个答案:

答案 0 :(得分:1)

您的尺寸不匹配!
您的model的第一层期望输入784-dim(我假设您得到的值为28x28 = 784,即mnist位数)。
但是,您的trainset将应用transforms.CenterCrop(10)-也就是说,它会从图像的中心裁剪10x10的区域,因此您的输入尺寸实际上是100。

摘要:
-您的第一层:nn.Linear(784, 128)期望输入784暗,而输出128暗的隐藏特征向量(每个输入)。因此,该层的权重矩阵为[784 x 128](错误消息中的“ m2”)。
-您的输入被中心裁切为10x10像素(共100暗),并且每批都有batch_size=64个这样的图像,错误消息中的输入总大小为[64 x 100](“ m1” )。
-您无法计算大小不匹配的矩阵之间的点积:100!= 784,因此pytorch会产生错误。

答案 1 :(得分:0)

您只需关心b=c,您就完成了:

m1: [a x b], m2: [c x d]

m1[a x b],是[batch size x in features]

m2[c x d],是[in features x out features]