运行时错误:大小不匹配 m1:[axb],m2:[cxd]

Urv*_*oni 9 machine-learning image-processing computer-vision python-3.x pytorch

任何人都可以帮助我吗?我得到低于错误。我使用谷歌 Colab。如何解决这个错误。?

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

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

    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)
Run Code Online (Sandbox Code Playgroud)

pro*_*sti 8

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

m1: [a x b], m2: [c x d]
Run Code Online (Sandbox Code Playgroud)

m1[a x b]哪个是[batch size x in features]

m2[c x d]哪个是[in features x out features]


Sha*_*hai 5

你的尺码不匹配!
您的第一层model需要 784-dim 输入(我假设您通过 28x28=784,即 mnist 数字的大小获得此值)。
但是,您trainset适用transforms.CenterCrop(10)- 即它从图像中心裁剪 10x10 区域,因此您的输入尺寸实际上是 100。

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