RuntimeError: stack expects each tensor to be equal size ??

这篇具有很好参考价值的文章主要介绍了RuntimeError: stack expects each tensor to be equal size ??。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RuntimeError: stack expects each tensor to be equal size, but got [1200, 1200, 3] at entry 0 and [1200, 1344, 3] at entry 1

pytorch 数据处理错误, 网上的各种方法都试过了

1: 检查过数据的输入通道是3, 标签是1,但是输入的大小尺寸不同

2: 进行如下方法也不行!!

data_tf = transforms.Compose([
            transforms.Resize((1024,1024)),
             # transforms.CenterCrop(1020),
              # transforms.RandomHorizontalFlip(),
              transforms.ToTensor(),
              ])

:3: bs=1,不报错,bs>1 报错

4: bug 未解决, 使用本地书记resize 处理

最终的解决之道!!!!!

出现的问题是collate_fn 参数 默认打包image, label,如果一个batch有多个输出,而且大小不一样,且使用了默认的collate_fn,则会报错
理论如下:

collate_fn 参数
当继承Dataset类自定义类时,__getitem__方法一般返回一组类似于(image,label)的一个样本,在创建DataLoader类的对象时,collate_fn函数会将batch_size个样本整理成一个batch样本,便于批量训练。

default_collate(batch)中的参数就是这里的 [self.dataset[i] for i in indices],indices是从所有样本的索引中选取的batch_size个索引,表示本次批量获取这些样本进行训练。self.dataset[i]就是自定义Dataset子类中__getitem__返回的结果。默认的函数default_collate(batch) 只能对大小相同image的batch_size个image整理,如[(img0, label0), (img1, label1),(img2, label2), ] 整理成([img0,img1,img2,], [label0,label1,label2,]), 这里要求多个img的size相同。所以在我们的图像大小不同时,需要自定义函数callate_fn来将batch个图像整理成统一大小的,若读取的数据有(img, box, label)这种你也需要自定义,因为默认只能处理(img,label)。当然你可以提前将数据集全部整理成统一大小的。
参考:原文链接:https://blog.csdn.net/Decennie/article/details/121000380

方法:重写collate_fn,不同大小的image要resize到同一个大小, 例子如下:
例子1:

def yolo_dataset_collate(batch):
    images = []
    bboxes = []
    for img, box in batch:
        images.append(img)
        bboxes.append(box)
    images = np.array(images)
    bboxes = np.array(bboxes)
    return images, bboxes

例子2:文章来源地址https://www.toymoban.com/news/detail-791398.html

# DataLoader中collate_fn使用, 数据大小保持一致
def deeplab_dataset_collate(batch):
    images = []
    pngs = []
    seg_labels = []
    for img, png, labels in batch:
        images.append(img)
        pngs.append(png)
        seg_labels.append(labels)
    images = np.array(images)
    pngs = np.array(pngs)
    seg_labels = np.array(seg_labels)
    return images, pngs, seg_labels

train_dataset = DeeplabDataset(train_lines, inputs_size, NUM_CLASSES, True)
val_dataset = DeeplabDataset(val_lines, inputs_size, NUM_CLASSES, False)
gen = DataLoader(train_dataset, batch_size=Batch_size, num_workers=2, pin_memory=True,
                        drop_last=True, collate_fn=deeplab_dataset_collate)
gen_val = DataLoader(val_dataset, batch_size=Batch_size, num_workers=2,pin_memory=True, 
                        drop_last=True, collate_fn=deeplab_dataset_collate)

到了这里,关于RuntimeError: stack expects each tensor to be equal size ??的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pytorch中报错RuntimeError: The size of tensor a (60) must match the size of tensor b (56)

    最近在学习YOLOV5的时候,刚开始遇到了如下的问题: 这可能是因为5.0的工程下载了个6.1的模型,所以不匹配 yolov5s.pt [https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt] 下载下来替换掉工程文件夹里的yolov5s.pt文件 发现下面这个问题直接消失了! 顺利完成 如果对你有用麻

    2024年02月01日
    浏览(34)
  • pytorch异常——RuntimeError:Given groups=1, weight of size..., expected of...

    nn.Conv2d 需要的输入张量格式为 (batch_size, channels, height, width),但您的示例输入张量 x 是 (batch_size, height, width, channels)。因此,需要对输入张量进行转置。 注意, TensorFlow使用\\\"NHWC\\\"(批次、高度、宽度、通道)格式,而PyTorch使用\\\"NCHW\\\"(批次、通道、高度、宽度)格式 在pytorch中

    2024年02月10日
    浏览(45)
  • 成功解决RuntimeError: batch2 must be a 3D tensor

    成功解决RuntimeError: batch2 must be a 3D tensor。 在深度学习的世界中,张量是构建一切的核心。它们是数据的容器,是模型训练的基石。然而,当我们尝试使用 torch.bmm() 函数进行批量矩阵乘法时,可能会遇到一个常见的错误:“RuntimeError: batch2 must be a 3D tensor”。这个错误提示似乎

    2024年02月22日
    浏览(29)
  • 生成器报错,RuntimeError: Sizes of tensors must match except in dimension

    RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 2 but got size 3 for tensor number 1 in the list. 常见的模型报错,比方说pix2pix模型 In[18], line 84, in Generator.forward(self, x)         82 bottleneck = self.bottleneck(d7)         83 up1 = self.up1(bottleneck) --- 84 up2 = self.up2(torch.cat([up1, d

    2024年02月09日
    浏览(31)
  • RuntimeError: Given groups=1, weight of size [14, 464, 1, 1], expected input问题解决

    BUG解决 :RuntimeError: Given groups=1, weight of size [14, 464, 1, 1], expected input[16, 116, 56, 1] to have 464 channels, but got 116 channels instead 首选说一下这个问题,这个问题提示想要得到的是464个通道数但是实际上得到的是116个通道。 例如我给某个深度学习网络中加CBAM注意力集中机制,具体可参

    2023年04月08日
    浏览(29)
  • 【解决问题】RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at non-singleton

    你可以去github上,这儿我用的是YOLOv5.5的版本,就去Tags6里面的model/common.py里面去找到这个SPPF的类,把它拷过来到你这个Tags5的model/common.py里面,这样你的代码就也有这个类了,还要引入一个warnings包就行了 点开common.py文件 将这个复制到对应的类就行了。 刚解决了上一个问题,结

    2024年02月16日
    浏览(28)
  • 解决pytorch报错——RuntimeError: Expected to have finished reduction in the prior iteration...

    之前写代码时碰到了这样一个错误: RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates that your module has parameters that were not used in producing loss. You can enable unused parameter detection by (1) passing the keyword argument find_unused_parameters=True to torch.nn.pa

    2023年04月17日
    浏览(35)
  • 彻底解决ES 数据查询 from + size must be less than or equal to:xxx 问题

    ES分页查询时出现超过一万页就爆出这个错误:Result window is too large, from + size must be less than or equal to: [10000] but… 该错误是由于es默认设置最大页数为一万的原因导致的,这样设置也是为了防止OOM。 第一种解决方式: 防止这个错误出现是设置 index.max_result_window的值。但是这种

    2024年02月14日
    浏览(28)
  • RuntimeError: result type Float can‘t be cast to the desired output type long int

    在使用yolov5训练自定义数据集的运行过程中报错: **RuntimeError: result type Float can‘t be cast to the desired output type long int ** 并不是自己构建的数据集有问题或者是下载更改后的代码有问题。 问题原因: 从Github上clone 的yolov5-master版本的代码是可以直接运行的,因为官网上clone 的代

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包