RuntimeError: несоответствие размера - PullRequest
0 голосов
/ 18 декабря 2018

Может кто-нибудь помочь мне в этом.?Я получаю ниже ошибки.Я использую Google Colab.Как решить эту ошибку?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)

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Все, что вам нужно, это 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]

0 голосов
/ 18 декабря 2018

У вас несоответствие размера!
Ваш первый слой model ожидает 784-тусклый ввод (я полагаю, вы получили это значение 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 выдает ошибку.

...