如何在pytorch中有效地制作一个小批量的图像?

如何在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 
+1

您可以像这样创建一个4d张量:torch.Tensor(1,1,1,1)。或者添加一个维度到任何张量(或变量),你可以做t.unsqueeze(0)。但不知道这将如何帮助你。你需要给我们提供错误,或者更多提示你被困住的地方。 – blckbird

+0

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在发布您的MCVE代码并准确描述问题之前,我们无法为您提供有效的帮助。 我们应该能够将发布的代码粘贴到文本文件中,并重现您描述的问题。 – Prune

+1

你有没有在pytorch中试过DataLoader(你可以在torch.utils.data中找到它)?它使用多处理功能为您制作小型贴片 – Kashyap

使用dataset = torchvision.datasets.ImageFolder(...)您可以加载图像文件夹中的数据集。之后,您可以使用torch.utils.data.DataLoader(dataset, batch_size=batchSize)指定小批量大小和其他事项以供进一步处理。