有人可以帮我吗?我正在错误以下。我使用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)
答案 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]