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)
你只需要关心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]
你的尺码不匹配!
您的第一层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 会给您一个错误。
| 归档时间: |
|
| 查看次数: |
9550 次 |
| 最近记录: |