gpt4 book ai didi

python - 如何在pytorch中测试一张图片

转载 作者:行者123 更新时间:2023-12-01 21:45:05 24 4
gpt4 key购买 nike

我在 pytorch 中创建了我的模型并且工作得非常好,但是当我只想测试一张图像时 batch_size=1 总是返回第二类(在本例中是一只狗)。

我尝试用 batch > 1 进行测试,在所有情况下都有效!

架构:

model = models.densenet121(pretrained=True)

for param in model.parameters():
param.requires_grad = False
from collections import OrderedDict
classifier = nn.Sequential(OrderedDict([
('fc1', nn.Linear(1024, 500)),
('relu', nn.ReLU()),
('fc2', nn.Linear(500, 2)),
('output', nn.LogSoftmax(dim=1))
]))

model.classifier = classifier

所以我的张量是 [batch, 3, 224, 224]

我试过:

resize
reshape
unsqueeze(0)

一张图片的响应总是[[0.4741, 0.5259]]

我的测试代码

from PIL import *
msize = 256
loader = transforms.Compose([transforms.Scale(imsize), transforms.ToTensor()])

def image_loader(image_name):
"""load image, returns cuda tensor"""
image = Image.open(image_name)
image = loader(image).float()
image = image.unsqueeze(0)
return image.cuda()
image = image_loader('Cat_Dog_data/test/cat/cat.16.jpg')
with torch.no_grad():
logits = model.forward(image)
ps = torch.exp(logits)
_, predTest = torch.max(ps,1)
print(ps) ## same value in all cases
imagen_mostrar = images[ii].to('cpu')
helper.imshow(imagen_mostrar,title=clas_perro_gato(predTest), normalize=True)

第二个测试代码

andrea_data = datasets.ImageFolder(data_dir + '/andrea', transform=test_transforms)
andrealoader = torch.utils.data.DataLoader(andrea_data, batch_size=1, shuffle=True)
dataiter = iter(andrealoader)
images, labels = dataiter.next()
images, labels = images.to(device), labels.to(device)
ps = torch.exp(model.forward(images))
_, predTest = torch.max(ps,1)
print(ps.float())

如果我将我的 batch_size 更改为 1,总是会返回一个张量,例如说它是一只狗 [0.43,0.57]。

谢谢!

最佳答案

我意识到我的模型未处于eval 模式。

所以我刚刚添加了 model.eval() 现在就是这样,适用于任何大小的批处理

关于python - 如何在pytorch中测试一张图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60841650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com