Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将PyTorch中的DataLoader更改为读取一幅图像进行预测?_Python_Pytorch_Dataloader - Fatal编程技术网

Python 如何将PyTorch中的DataLoader更改为读取一幅图像进行预测?

Python 如何将PyTorch中的DataLoader更改为读取一幅图像进行预测?,python,pytorch,dataloader,Python,Pytorch,Dataloader,目前,我有一个预先训练过的模型,它使用数据加载器读取一批图像来训练模型 self.data\u loader=torch.utils.data.DataLoader(数据集,批处理大小=批处理大小,shuffle=False, num_workers=1,pin_memory=True) ... model.eval() 对于步骤,enumerate中的输入(test_loader.data_loader): 输出=型号(火炬类别([输入],1)) ... 当图像从队列中到达时,我想对其进行处

目前,我有一个预先训练过的模型,它使用数据加载器读取一批图像来训练模型

self.data\u loader=torch.utils.data.DataLoader(数据集,批处理大小=批处理大小,shuffle=False,
num_workers=1,pin_memory=True)
...
model.eval()
对于步骤,enumerate中的输入(test_loader.data_loader):
输出=型号(火炬类别([输入],1))
...
当图像从队列中到达时,我想对其进行处理(进行预测)。它应该类似于读取单个图像并运行模型对其进行预测的代码。大致如下:

从PIL导入图像
新建输入=Image.open(图像路径)
model.eval()
输出=型号(火炬类别([新输入],1))

我想知道您是否可以指导我如何执行此操作并在DataLoader中应用相同的转换。

我不知道DataLoader,但您可以使用以下功能加载单个图像:

def safe_pil_loader(path, from_memory=False):
try:
    if from_memory:
        img = Image.open(path)
        res = img.convert('RGB')
    else:
        with open(path, 'rb') as f:
            img = Image.open(f)
            res = img.convert('RGB')
except:
    res = Image.new('RGB', (227, 227), color=0)
return res
对于应用转换,您可以执行以下操作:

trans = transforms.Compose([
            transforms.Resize(299),
            transforms.CenterCrop(299),
            transforms.ToTensor(),
            normalize,
        ])
img=trans(img)

我不知道dataLoader,但您可以使用以下功能加载单个图像:

def safe_pil_loader(path, from_memory=False):
try:
    if from_memory:
        img = Image.open(path)
        res = img.convert('RGB')
    else:
        with open(path, 'rb') as f:
            img = Image.open(f)
            res = img.convert('RGB')
except:
    res = Image.new('RGB', (227, 227), color=0)
return res
对于应用转换,您可以执行以下操作:

trans = transforms.Compose([
            transforms.Resize(299),
            transforms.CenterCrop(299),
            transforms.ToTensor(),
            normalize,
        ])
img=trans(img)
您可以使用do it with:

和批次大小=1:

import queue
import torchvision.transforms.functional as TF

buffer = queue.Queue()
new_input = Image.open(image_path)
buffer.put(TF.to_tensor(new_input)) 
# ... Populate queue here

dataset = MyDataset(buffer)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=1)
for data in dataloader:
   model(data) # data is one-image batch of size [1,3,H,W] where 3 - number of color channels
您可以使用do it with:

和批次大小=1:

import queue
import torchvision.transforms.functional as TF

buffer = queue.Queue()
new_input = Image.open(image_path)
buffer.put(TF.to_tensor(new_input)) 
# ... Populate queue here

dataset = MyDataset(buffer)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=1)
for data in dataloader:
   model(data) # data is one-image batch of size [1,3,H,W] where 3 - number of color channels

这实际上取决于
数据集的工作方式。问题中没有提供详细信息。@jodag我编辑了问题以提供更多上下文。非常感谢您的帮助。这将取决于
数据集的工作方式。问题中没有提供详细信息。@jodag我编辑了问题以提供更多上下文。谢谢你的帮助。谢谢@Marzieh Heidari!谢谢@Marzieh Heidari!谢谢@Anton GanichevThanks@Anton Ganichev