如何在pytorch中有效地制作一个小批量的图像?
问题描述:
我想在pytorch中使用预先训练好的ResNet模型来计算正向通行证。我无法创建小批量的4维张量。有人可以告诉什么是适当的方式来做到这一点?如何在pytorch中有效地制作一个小批量的图像?
编辑:我改变了代码,它现在的作品。不过,我仍然认为应该采取更有效的方式来做到这一点。
这里是我的代码:
import pickle
import json
import shutil
import Image
import torchvision.models as models
import torchvision.transformers as transformers
from torch.autograd import Variable
from torch import Tensor
import glob
import torch
batch_size = 128
im_size = 299
normalize = transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
preprocess = transforms.Compose([
transforms.Scale(im_size),
transforms.CenterCrop(im_size),
transforms.ToTensor(),
normalize
])
model = models.resnet50(pretrained=True)
d_batch = make_batch(imgs, batch_size)
dtype = torch.FloatTensor
tmp = Variable(torch.randn(batch_size, 3, im_size, im_size).type(dtype), requires_grad=False)
for batch in tqdm(batches):
try:
data = [Image.open(img) for img in batch]
for idx, item in enumerate(data):
tmp[idx] = preprocess(item)
batch_result = model(tmp)
except Exception,x:
print x
答
使用dataset = torchvision.datasets.ImageFolder(...)
您可以加载图像文件夹中的数据集。之后,您可以使用torch.utils.data.DataLoader(dataset, batch_size=batchSize)
指定小批量大小和其他事项以供进一步处理。
您可以像这样创建一个4d张量:torch.Tensor(1,1,1,1)。或者添加一个维度到任何张量(或变量),你可以做t.unsqueeze(0)。但不知道这将如何帮助你。你需要给我们提供错误,或者更多提示你被困住的地方。 – blckbird
欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在发布您的MCVE代码并准确描述问题之前,我们无法为您提供有效的帮助。 我们应该能够将发布的代码粘贴到文本文件中,并重现您描述的问题。 – Prune
你有没有在pytorch中试过DataLoader(你可以在torch.utils.data中找到它)?它使用多处理功能为您制作小型贴片 – Kashyap