誰もがこれで私を助けることができますか?エラーが発生しています。私は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)
サイズが一致しません!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はエラーを返します。