【发布时间】:2017-11-03 19:00:21
【问题描述】:
我正在尝试使用 pytorch 中预训练的 ResNet 模型计算前向传递。我无法创建小批量的 4-d 张量。有人能告诉我这样做的正确方法是什么吗?
编辑:我更改了代码,现在可以使用了。但是,我仍然认为应该有更有效的方法来做到这一点。
这是我的代码:
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
【问题讨论】:
-
你可以像这样创建一个 4d 张量:torch.Tensor(1,1,1,1)。或者要为任何张量(或变量)添加维度,您可以执行 t.unsqueeze(0)。但不确定这将如何帮助您。您需要向我们提供错误或更多提示。
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
-
你试过pytorch中的DataLoader(你可以在torch.utils.data中找到)吗?它使用多处理为您制作小批量
标签: deep-learning pytorch resnet mini-batch