web-dev-qa-db-ja.com

RuntimeError:サイズの不一致m1:[a x b]、m2:[c x d]

誰もがこれで私を助けることができますか?エラーが発生しています。私はGoogle 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)
6
Urvi Soni

サイズが一致しません!
modelの最初のレイヤーは、784 dimの入力を想定しています(この値は28x28 = 784であると思います。これは、ミニスト桁のサイズです)。
ただし、trainsetが適用されます transforms.CenterCrop(10) -つまり、画像の中心から10x10の領域がトリミングされるため、入力寸法は実際には100。

要約すると:
-最初のレイヤー:nn.Linear(784, 128)は、784 dimの入力を想定し、128 dimの非表示の特徴ベクトル(入力ごと)を出力します。したがって、このレイヤーの重み行列は[784 x 128](エラーメッセージの "m2")です。
-入力は10x10ピクセル(合計100-dim)に中央がトリミングされており、各バッチにbatch_size=64の画像があり、合計[64 x 100]入力サイズ( "m1エラーメッセージで)。
-サイズが一致しない行列間のドット積を計算できません:100!= 784したがって、pytorchはエラーを返します。

1
Shai