如何解决PyTorch中的尺寸不匹配错误?

我正在尝试使用CIFAR10数据在PyTorch中创建一个逻辑模型。在运行模型进行评估后,我遇到了一个错误:

RuntimeError: size mismatch, m1: [750 x 4096], m2: [1024 x 10] at C:\w\1\s\tmp_conda_3.7_100118\conda\conda-bld\pytorch_1579082551706\work\aten\src\TH/generic/THTensorMath.cpp:136

看起来是input_size造成了问题,我对此并不熟悉。请告诉我应该做哪些更改来解决这个错误。

这些是超参数:

batch_size = 100learning_rate = 0.001# Other constantsinput_size = 4*4*64num_classes = 10

这是下载并将数据集分割成训练、验证和测试集的单元格。

transform = torchvision.transforms.Compose(    [torchvision.transforms.ToTensor(),     torchvision.transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))])testset = torchvision.datasets.CIFAR10(root='D:\PyTorch\cifar-10-python', train=False,download=False, transform=transform)trainvalset = torchvision.datasets.CIFAR10(root='D:\PyTorch\cifar-10-python', train=True,download=False, transform=transform)trainset, valset = torch.utils.data.random_split(trainvalset, [45000, 5000]) # 10% for validationtrain_loader = torch.utils.data.DataLoader(trainset, batch_size=50, shuffle=True)test_loader = torch.utils.data.DataLoader(testset, batch_size=1000, shuffle=False)val_loader = torch.utils.data.DataLoader(valset, batch_size=1000, shuffle=False)

这是我的模型架构。

class CifarModel(nn.Module):    def __init__(self):        super().__init__()        self.linear = nn.Linear(input_size,  num_classes)    def forward(self, xb):        xb = xb.view(-1, 64*8*8)        #xb = xb.reshape(-1, 784)        print(xb.shape)        out = self.linear(xb)        return out    def training_step(self, batch):        images, labels = batch         out = self(images)                  # Generate predictions        loss = F.cross_entropy(out, labels) # Calculate loss        return loss    def validation_step(self, batch):        images, labels = batch         out = self(images)                    # Generate predictions        loss = F.cross_entropy(out, labels)   # Calculate loss        acc = accuracy(out, labels)           # Calculate accuracy        return {'val_loss': loss.detach(), 'val_acc': acc.detach()}    def validation_epoch_end(self, outputs):        batch_losses = [x['val_loss'] for x in outputs]        epoch_loss = torch.stack(batch_losses).mean()   # Combine losses        batch_accs = [x['val_acc'] for x in outputs]        epoch_acc = torch.stack(batch_accs).mean()      # Combine accuracies        return {'val_loss': epoch_loss.item(), 'val_acc': epoch_acc.item()}    def epoch_end(self, epoch, result):        print("Epoch [{}], val_loss: {:.4f}, val_acc: {:.4f}".format(epoch, result['val_loss'], result['val_acc']))model = CifarModel()
def accuracy(outputs, labels):    _, preds = torch.max(outputs, dim=1)    return torch.tensor(torch.sum(preds == labels).item() / len(preds))def evaluate(model, val_loader):    outputs = [model.validation_step(batch) for batch in val_loader]    return model.validation_epoch_end(outputs)def fit(epochs, lr, model, train_loader, val_loader, opt_func=torch.optim.SGD):    history = []    optimizer = opt_func(model.parameters(), lr)    for epoch in range(epochs):        # Training Phase         for batch in train_loader:            loss = model.training_step(batch)            loss.backward()            optimizer.step()            optimizer.zero_grad()        # Validation phase        result = evaluate(model, val_loader)        model.epoch_end(epoch, result)        history.append(result)    return historyevaluate(model, val_loader)

回答:

你在这里指定了输出类别数应为10:

num_classes = 10

然而,你的前向函数并未反映这一点:

xb = xb.view(-1, 64*8*8) # 你得到750x4096out = self.linear(xb) # 这里线性层的输入尺寸=input_size = 4*4*64 # 1024# num_classes = 10 

请按如下方式修改:

xb = xb.view(-1, 64*4*4) # 你得到750x1024out = self.linear(xb) # M1 750x1024 M2 1024x10:# input_size = 4*4*64 # 1024# num_classes = 10 

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注