1

我正在尝试使用 Pytorch 设置图像分类器。我的示例图像有 4 个通道,大小为 28x28 像素。我正在尝试使用内置的 torchvision.models.inception_v3() 作为我的模型。每当我尝试运行我的代码时,都会收到此错误:

RuntimeError:计算的每个通道的填充输入大小:(1 x 1)。内核大小:(3 x 3)。内核大小不能大于 /opt/conda/conda-bld/pytorch_1524584710464/work/aten/src/THNN/generic/SpatialConvolutionMM.c:48 处的实际输入大小

我找不到如何更改每个通道的填充输入大小或完全弄清楚错误的含义。我认为我必须修改每个通道的填充输入大小,因为我无法在预制模型中编辑内核大小。

我尝试过填充,但没有帮助。这是我调用 train() 时引发错误的代码的缩短部分:

import torch
import torchvision as tv
import torch.optim as optim
from torch import nn
from torch.utils.data import DataLoader

model = tv.models.inception_v3()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.0001, weight_decay=0)
lr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=4, gamma=0.9)  

trn_dataset = tv.datasets.ImageFolder(
    "D:/tests/classification_test_data/trn",
    transform=tv.transforms.Compose([tv.transforms.RandomRotation((0,275)), tv.transforms.RandomHorizontalFlip(),
                                  tv.transforms.ToTensor()]))
trn_dataloader = DataLoader(trn_dataset, batch_size=32, num_workers=4, shuffle=True)

for epoch in range(0, 10):
    train(trn_dataloader, model, criterion, optimizer, lr_scheduler, 6, 32)
print("End of training")


def train(train_loader, model, criterion, optimizer, scheduler, num_classes, batch_size):
    model.train()
    scheduler.step()

    for index, data in enumerate(train_loader):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = model(inputs)
        outputs_flatten = flatten_outputs(outputs, num_classes)
        loss = criterion(outputs_flatten, labels)
        loss.backward()
        optimizer.step()


def flatten_outputs(predictions, number_of_classes):
    logits_permuted = predictions.permute(0, 2, 3, 1)
    logits_permuted_cont = logits_permuted.contiguous()
    outputs_flatten = logits_permuted_cont.view(-1, number_of_classes)
    return outputs_flatten
4

2 回答 2

1

可能是由于以下原因。Inception_v3 模型的 Pytorch 文档指出,该模型需要形状为 Nx3x299x299 的输入。这是因为该架构包含一个固定形状的全连接层。

重要提示:与其他模型相比,inception_v3 需要大小为 N x 3 x 299 x 299 的张量,因此请确保您的图像具有相应的大小。

https://pytorch.org/docs/stable/torchvision/models.html#inception-v3

于 2020-03-01T10:03:28.767 回答
0

可能这是一个迟到的帖子,但我试图用一种简单的技术来解决这个问题。在遇到这种错误时,我正在使用自定义 conv2d 模块,不知何故我错过了将填充发送到我的 nn.conv2d。我发现了这个错误,在我的 conv2d 实现中,我打印了输出变量的形状,并在我的代码中找到了确切的错误。model = VGG_BNN_ReLU('VGG11',10) import torch x = torch.randn(1,3,32,32) model.forward(x)

希望这有帮助。快乐学习

于 2020-05-11T17:21:41.050 回答