训练好模型,测试程序报错:
File "D:\anaconda\lib\site-packages\torch\nn\modules\batchnorm.py", line 242, in _check_input_dim
if input.dim() != 4:
AttributeError: 'numpy.ndarray' object has no attribute 'dim'
报错是数组类型没有属性dim, 改为张量Tensor即可。
val_transform = transforms.Compose([
#transforms.Resize(112, 112),
transforms.ToTensor()])
img = val_transform(img)
又报错:
File "D:\anaconda\lib\site-packages\torchvision\transforms\functional.py", line 50, in to_tensor
raise TypeError('pic should be PIL Image or ndarray. Got {}'.format(type(pic)))
TypeError: pic should be PIL Image or ndarray. Got <class 'numpy.ndarray'>
这是因为函数val_transform的输入应该是PIL Image的格式,其他的格式会报错,应该把格式转为Image,即:
from PIL import Image
img = Image.fromarray(img)#把格式转换为PIL Image,这里img为原来的numpy数组类型的输入
img = val_transform(img)
img = img[np.newaxis, :, :, :]#维度转换为torch.Size([1, 3, 112, 112])
——————————————————————————————————
可以直接使用torch将 ‘numpy.ndarray’ object 转换为tensor,
#img = Image.fromarray(img)
# img = val_transform(img)
img = img[np.newaxis, :, :, :]
# print(img.shape)
return torch.FloatTensor(img)