2017-10-11 144 views
0

我想在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

回答

0

使用dataset = torchvision.datasets.ImageFolder(...)您可以加載圖像文件夾中的數據集。之後,您可以使用torch.utils.data.DataLoader(dataset, batch_size=batchSize)指定小批量大小和其他事項以供進一步處理。

相關問題