pytorch - 如何在 Pytorch 中更改每个通道的填充输入大小?
问题描述
我正在尝试使用 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
解决方案
可能是由于以下原因。Inception_v3 模型的 Pytorch 文档指出,该模型需要形状为 Nx3x299x299 的输入。这是因为该架构包含一个固定形状的全连接层。
重要提示:与其他模型相比,inception_v3 需要大小为 N x 3 x 299 x 299 的张量,因此请确保您的图像具有相应的大小。
https://pytorch.org/docs/stable/torchvision/models.html#inception-v3
推荐阅读
- java - 通过套接字将 JTable 数据从服务器发送到客户端 JTable
- drupal-modules - hook_mail() 的“from”参数在 Drupal 8 中不起作用?
- docker - dockerd 为所有容器设置默认环境变量
- laravel-5 - 无法从 Vue.js 中的单个文件组件导入 Mixin
- c++ - 非常慢的 ffmpeg/sws_scale() - 仅在重载时
- javascript - Javascript:根据选择选项设置背景颜色时出错
- twitter-bootstrap - 无线电类型的reactjs ToggleButtonGroup不起作用
- php - wordpress的wp_post表中的数据以哪种形式存储
- .net - 将 .Net 2.0 项目转换为 .Net 4.7
- javascript - 内容处置的 HTML 强制“另存为”对话框:内联