一、报错
input {} float32 type is not supported.
二、场景
# 首先获取源数据
transform = transforms.Compose([transforms.ToTensor()])
trainset = CIFAR10(root="./data",train=True,download=True,transform = transform) # 使用ToTensor之后[0,255]转[0,1.0],可以读取出来的图像像素矩阵都是这个范围
train_loader = DataLoader(trainset,batch_size=batch_size,shuffle=False,num_workers=2)
如果对于读取出来的像素矩阵转numpy之后,尝试直接利用torchvision.transforms.ToPILImage()(img_data)来转成PIL Image的类型的话,就会报错,因为此时是float32的数据类型,如果强制转int,考虑到此时的数值都是[0,1]之间,结果可想而知。
三、解决方案
NUMPY -> TENSOR -> PIL IMAGE,此时即便NUMPY矩阵是[0,1]之间的数值也无妨
img_data = transforms.ToPILImage()(torch.from_numpy(img_data))# numpy->PIL Image # 假设是(32,32,3)而非(3,32,32)