The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0 维度不匹配

在导入一个png文件的时候,发现报这个错,源码如下,经过查询找到了两种解决方案。

from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
import torch

writer = SummaryWriter("logs")
img = Image.open("C:/Users/Mxx/PycharmProjects/pythonProject4/images_set/GOGOGOGO.png")
print(img)
#img = img.convert('RGB')
print(img)

trans_totensor = transforms.ToTensor() #首先创建一个对象,来使用ToTensor的方法
img_tensor = trans_totensor(img)
writer.add_image("ToTensor",img_tensor)

#img = img.convert('RGB')
#Normalize
print(img_tensor[0][0][0])
print("---------")
print(img_tensor.shape)
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()

1.因为png是四个通道,所以需要在Normalize的时候加一个维度。

trans_norm = transforms.Normalize([0.5,0.5,0.5,0.5],[0.5,0.5,0.5,0.5])

2.讲png转成rgb这样只需要做三个维度的标准化。

img = img.convert('RGB')

将png和RGB以及标准化后的png和RGB进行输出,发现原本的png和RGB差不多。

标准化后的相比于标准化前是变的模糊了,但是标准化后的png和RGB是差不多的。 

 更改后的test代码如下

from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
import torch

writer = SummaryWriter("logs")
img = Image.open("C:/Users/Mxx/PycharmProjects/pythonProject4/images_set/GOGOGOGO.png")
print(img)
img_RGB = img.convert('RGB')


trans_totensor = transforms.ToTensor() #首先创建一个对象,来使用ToTensor的方法
img_tensor = trans_totensor(img)
#rgb 的 tensor
imgRGB_tensor = trans_totensor(img_RGB)

writer.add_image("ToTensor",img_tensor)

writer.add_image("RGB-ToTensor",imgRGB_tensor)
#img = img.convert('RGB')
#Normalize

trans_norm_png = transforms.Normalize([0.5,0.5,0.5,0.5],[0.5,0.5,0.5,0.5])
img_norm = trans_norm_png(img_tensor)

trans_norm_RGB = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
imgRGB_norm = trans_norm_RGB(imgRGB_tensor)


writer.add_image("PNG Normalize",img_norm)
writer.add_image("RGB Normalize",imgRGB_norm)
writer.close()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,您遇到的错误是"RuntimeError: The size of tensor a (3) must match the size of tensor b (0) at non-singleton dimension 3"。这个错误通常是由于张量的维度不匹配导致的。为了解决这个问题,您可以尝试以下方法: 1. 检查张量的维度:确保张量a和张量b在非单例维度3上的大小相同。您可以使用`size()`函数来检查张量的维度和大小。 2. 调整张量的大小:如果张量a和张量b的大小不匹配,您可以使用PyTorch的`view()`函数来调整张量的大小,以确保它们在非单例维度3上的大小相同。 3. 检查数据加载:如果您正在使用数据加载器加载数据,并且遇到了这个错误,那么可能是因为数据加载器返回的张量大小不一致。请确保您的数据加载器正确地处理数据,并返回具有相同大小的张量。 4. 检查模型结构:如果您正在使用模型进行训练,并且遇到了这个错误,那么可能是因为模型的输入和输出张量大小不匹配。请检查模型的结构,并确保输入和输出张量的大小匹配。 5. 检查损失函数:如果您正在使用损失函数计算损失,并且遇到了这个错误,那么可能是因为损失函数期望的输入张量大小与实际的张量大小不匹配。请检查损失函数的文档,并确保输入张量的大小与其期望的大小匹配。 请根据您的具体情况尝试上述方法来解决问题。如果问题仍然存在,请提供更多的上下文信息,以便我能够更好地帮助您解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值