使用transfroms方法过程报错:
RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0
代码块:
from PIL import Image
#from torchvision import transforms
#首先导入一张图片
img = Image.open("images/pytorch.png")
print(img)#运行一下看图片有没有正常读取
#它是PIL的图片类型,图片大小是955×500
from torchvision import transforms
#首先看compose类,就是把不同的transforms结合在一起的
#小课堂
#python中__call__的用法
# transforms的compose方法既可以通过内置函数调用也可以通过__call__来调用
#常用一个类对象接一个括号()的形式调用
#ToTensor
#将一个PIL或者numpy的图像转化成tensor
from torch.utils.tensorboard import SummaryWriter#从tensorboard引入了SummaryWriter
writer = SummaryWriter("logs")
img = Image.open("images/pytorch.png")
print(img)
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor",img_tensor)
# writer.close()
##Normalization归一化
# 能够归一化一个tnesor的图像,随着他的平均值或者标准差
# 给一个均值和标准差看维度
# 能够将每一个信道的值归一化
# 归一化的计算公式
# output[channel] = (input[channel] - mean[channel]) / std[channel]`
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("normalize",img_norm)
writer.close()
报错后定位到第40行代码:
img_norm = trans_norm(img_tensor)
原因分析:
输入图像有一个 alpha 通道的像素,因此它是四通道而不是是三通道的图像
验证猜想
解决方法:
将四通道RGBA图像转换成三通道的RGB图像
img = Image.open("images/pytorch.png").convert('RGB')