使用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')
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐