2017-10-11 1 views
0

Ich versuche, einen Vorwärtsdurchlauf zu berechnen, indem ich ein vortrainiertes ResNet-Modell in pytorch verwende. Ich habe Probleme bei der Erstellung eines 4-D-Tensors für Mini-Batches. Kann jemand bitte sagen, was der richtige Weg ist, das zu tun?wie effizient ein Mini-Batch von Bildern in Pytorch?

EDIT: Ich habe den Code geändert und es funktioniert jetzt. Dennoch denke ich, dass es einen effizienteren Weg geben sollte, dies zu tun.

Hier ist mein Code:

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

Sie können einen 4D Tensor wie folgt erzeugen: torch.Tensor (1,1,1,1). Oder um einem Tensor (oder einer Variablen) eine Dimension hinzuzufügen, können Sie t.unsqueeze (0) tun. Aber nicht sicher, wie dir das weiterhilft. Sie müssen uns den Fehler geben, oder mehr Hinweise, wo Sie stecken bleiben. – blckbird

+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren MCVE-Code veröffentlicht und das Problem genau beschrieben haben. Wir sollten in der Lage sein, Ihren gesendeten Code in eine Textdatei einzufügen und das beschriebene Problem zu reproduzieren. – Prune

+1

Haben Sie versucht, DataLoader (Sie finden es in fackel.utils.data) in pytorch ?? Es macht Minibatches für Sie mit Multiprocessing – Kashyap

Antwort

0

dataset = torchvision.datasets.ImageFolder(...) Verwenden Sie einen Datensatz aus Bildordner laden. Danach können Sie torch.utils.data.DataLoader(dataset, batch_size=batchSize) verwenden, um Mini-Batch-Größe und andere Dinge für die weitere Verarbeitung anzugeben.