You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch中不使用DataLoader单张图片预测结果异常问题求助

PyTorch单张图片预测异常问题

我尝试不使用DataLoader对单张图片进行预测,但得到了异常结果:
终端异常结果

使用DataLoader批量预测时,预测结果与标签完全一致;但直接读取单张图片预测时,结果完全不符合预期——比如模型全预测为14,实际标签3的图片被预测成25。

我是PyTorch新手,想知道是不是必须使用DataLoader才能正确预测?

以下是我的核心代码:

data_transforms = {
    'train':
    transforms.Compose([
    transforms.Resize(256),
    transforms.RandomRotation(45),
    transforms.CenterCrop(224),
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.RandomVerticalFlip(p=0.5),
    transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1),
    transforms.RandomGrayscale(p=0.025),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'valid': transforms.Compose([transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}
   
def loop_prediction(): # wrong label
    correct_count = 0
    size = 10
    for i in range(size):
        # random get a name from './flower_data/valid/{random_number}/*.jpg'
        rand_int = random.randint(2, 3)
        img_file_name = random.choice(os.listdir(f'./flower_data/valid/{rand_int}'))
        img_file = f'./flower_data/valid/{rand_int}/{img_file_name}'
        img = Image.open(img_file)
        # read a image and change to tensor
        transform = transforms.Compose([
            transforms.Resize(256),
            transforms.CenterCrop(224),
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
        ])

        img = transform(img)
        img = img.unsqueeze(0)
        # print(img.shape)
        model_ft.eval()
        with torch.no_grad():
            output = model_ft(img.cuda())

            _, preds_tensor = torch.max(output, 1)
            preds = np.squeeze(preds_tensor.numpy()) if not train_on_gpu else np.squeeze(
                preds_tensor.cpu().numpy())  #

        print('Label', rand_int, ' ', 'Predict:', preds)
        if preds + 1 == rand_int:
            correct_count += 1
   
def batch_prediction(): # correct label
    image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in
                      ['train', 'valid']}
    dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=batch_size, shuffle=True) for x in
                   ['train', 'valid']}
    dataiter = iter(dataloaders['valid'])
    images, labels = next(dataiter)
    model_ft.eval()
    print(images.shape, labels.shape)
    if train_on_gpu:
        output = model_ft(images.cuda())
    else:
        output = model_ft(images)
    _, preds_tensor = torch.max(output, 1)
    preds = np.squeeze(preds_tensor.numpy()) if not train_on_gpu else np.squeeze(preds_tensor.cpu().numpy())
    print('Label:', labels, 'Predict:', preds)

我希望找到在PyTorch中不使用DataLoader对单张图片进行预测并得到正确标签的方法。

终端结果

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:42:45