如何在 pytorch 中加载我自己的测试数据(image.jpg)来测试我的 CNN?
您需要向网络提供与训练中相同的图像:也就是说,您应该应用完全相同的转换以获得相似的结果。
假设您的网络使用此代码(或类似代码)进行训练,您可以看到输入图像(用于验证)经历了以下转换:
transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), normalize, ])),
torchvision.transforms
文档,您可以看到输入图像经过:
[0, 1]
,并转置为 3×224×224 数组 您可以对任何图像手动执行所有这些操作
import numpy as np
from PIL import Image
pil_img = Image.open('image.jpg').resize((256, 256), Image.BILINEAR) # read and resize
# center crop
w, h = pil_img.size
i = int(round((h - 224) / 2.))
j = int(round((w - 224) / 2.))
pil_img = pil_img.crop((j, i, j+224, i+224))
np_img = np.array(pil_img).astype(np.float32) / 255.
np_img = np.transpose(np_img, (2, 0, 1))
# normalize
mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225]
for c in range(3):
np_img = (np_img[c, ...] - mean[c]) / std[c]
一旦您准备好模型
np_img
,您就可以运行前馈传递:
pred = model(np_img[None, ...]) # note that we add a singleton leading dim for batch
我的问题是加载测试数据,我找到了解决方案。
test_data = datasets.ImageFolder('root/test_cnn', transform=transform)
例如,如果我有 2 个包含图像的目录 cat 和dog(在 test_cnn 目录中),则 Object ImageFolder 会自动将类 cat 和 Dog 分配给我的图像。
在测试期间,我只需放弃课程即可。