gpt4 book ai didi

python-3.x - 大小不匹配,m1 : [3584 x 28], m2 : [784 x 128] at/pytorch/aten/src/TH/generic/THTensorMath. cpp:940

转载 作者:行者123 更新时间:2023-12-04 01:48:52 25 4
gpt4 key购买 nike

我已经执行了以下代码并得到了最底部显示的错误。我想知道如何解决这个问题。谢谢

import torch.nn as nn
import torch.nn.functional as F
from torch import optim

from torchvision import transforms
_tasks = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

from torchvision.datasets import MNIST
mnist = MNIST("data", download=True, train=True, transform=_tasks)

from torch.utils.data import DataLoader
from torch.utils.data.sampler import SubsetRandomSampler

create training and validation split
split = int(0.8 * len(mnist))

index_list = list(range(len(mnist)))
train_idx, valid_idx = index_list[:split], index_list[split:]

create sampler objects using SubsetRandomSampler
tr_sampler = SubsetRandomSampler(train_idx)
val_sampler = SubsetRandomSampler(valid_idx)

create iterator objects for train and valid datasets
trainloader = DataLoader(mnist, batch_size=256, sampler=tr_sampler)
validloader = DataLoader(mnist, batch_size=256, sampler=val_sampler)
创建执行模型
class Model(nn.Module):
def init(self):
super().init()
self.hidden = nn.Linear(784, 128)
self.output = nn.Linear(128, 10)

def forward(self, x):
x = self.hidden(x)
x = F.sigmoid(x)
x = self.output(x)
return x

model = Model()

loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay= 1e-6, momentum = 0.9, nesterov = True)

for epoch in range(1, 11): ## run the model for 10 epochs
train_loss, valid_loss = [], []

#training part
model.train()
for data, target in trainloader:
optimizer.zero_grad()

#1. forward propagation
output = model(data)

#2. loss calculation
loss = loss_function(output, target)

#3. backward propagation
loss.backward()

#4. weight optimization
optimizer.step()

train_loss.append(loss.item())

# evaluation part
model.eval()
for data, target in validloader:
output = model(data)
loss = loss_function(output, target)
valid_loss.append(loss.item())

执行此操作时出现以下错误:

RuntimeError Traceback (most recent call last) in () ----> 1 output = model(data) 2 3 ## 2. loss calculation 4 loss = loss_function(output, target) 5

/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in call(self, *input, **kwargs) 487 result = self._slow_forward(*input, **kwargs)

/usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in linear(input, weight, bias) 1352 ret = torch.addmm(torch.jit._unwrap_optional(bias), input, weight.t()) 1353 else: -> 1354 output = input.matmul(weight.t()) 1355 if bias is not None: 1356 output += torch.jit._unwrap_optional(bias)

RuntimeError: size mismatch, m1: [3584 x 28], m2: [784 x 128] at /pytorch/aten/src/TH/generic/THTensorMath.cpp:940

最佳答案

您输入的 MNIST 数据的形状 [256, 1, 28, 28] 对应于 [B, C, H, W]。在将输入图像馈送到线性层 Linear(784, 128) 之前,您需要将输入图像展平为单个 784 长向量,这样输入就变成了 [256, 784]对应于[B, N],其中N是1x28x28,你的图片大小。这可以按如下方式完成:

for data, target in trainloader:

# Flatten MNIST images into a 784 long vector
data = data.view(data.shape[0], -1)

optimizer.zero_grad()
...

在验证循环中也需要做同样的事情。

关于python-3.x - 大小不匹配,m1 : [3584 x 28], m2 : [784 x 128] at/pytorch/aten/src/TH/generic/THTensorMath. cpp:940,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54218604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com