Pytorch报错解决:The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimensio

报错内容

报错分析

        在执行 F.normalize(tensor, self.mean, self.std, self.inplace) 时,出现了tensor维度不匹配的问题(在axis=0的轴上,需要3维,得到的tensor为4维),该函数由 img = self.transform(img) 调用,因此可以判断在执行 self.transform(img) 前得到的img维度就不对,即读取的img包含RGBA四个通道。

报错代码定位

 

验证及解决

使用的图像:

 验证代码:

from PIL import Image
import numpy as np

img_path = r"E:\datasets\plants\ip102_v1_1_old\splited_images\Alfalfa\train\Pieris canidia\40563.jpg"

with open(img_path, 'rb') as f:
    img = Image.open(f)
    img2 = img.convert("RGB")

temp_img = np.array(img).transpose(2, 0, 1)
temp_img2 = np.array(img2).transpose(2, 0, 1)
if(temp_img.shape[0] == 4):
    print("abnormal img")

debug截图:         因此,使用PIL.Image读取图像后,要用 .convert("RGB") 转为RGB三个通道。

错误代码修改:

注意: .convert("RGB")是一个有返回值的函数,并不直接对原来的img进行修改。

您遇到的错误是RuntimeError: The size of tensor a (12) must match the size of tensor b (8) at non-singleton dimension 3。这个错误表示在第3个维度上,张量a的大小为12,而张量b的大小为8,它们的大小不匹配。您可以通过查看代码,确保这两个张量在第3个维度上具有相同的大小,并进行相应的处理以满足要求。 解决方案: 根据您提供的错误信息,您可以使用以下方法来解决这个问题: 1. 检查代码逻辑:检查您的代码,确认在使用这两个张量执行操作之前,它们在第3个维度上的大小是否一致。可能是由于数据处理或计算过程中的错误导致了这个大小不匹配的问题。 2. 调整张量的大小:如果您发现这两个张量在第3个维度上的大小不匹配,您可以使用相应的方法来调整它们的大小。例如,您可以使用PyTorch中的view函数来改变张量的形状。您可以参考上面引用中的示例代码,使用view函数将张量的形状改变成匹配的大小。 3. 检查数据加载器设置:如果您的代码涉及到使用数据加载器加载数据,您可以检查数据加载器的设置,确保在创建数据加载器时没有出现错误。特别是,检查数据加载器的batch_size参数是否正确设置为可以匹配这两个张量大小的值。 总之,要解决RuntimeError: The size of tensor a (12) must match the size of tensor b (8) at non-singleton dimension 3的错误,您需要检查代码逻辑,调整张量的大小或检查数据加载器的设置,以确保这两个张量在第3个维度上具有相同的大小。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值