Pytorch 学习(二十五)---高级DataLoader技巧---每个批次返回的Tensor大小无限制
发布时间
阅读量:
阅读量
总说
众所周知,默认情况下,DataLoader每次返回一个具有固定尺寸的Tensor张量。当batchsize大于1时,默认情况下会堆叠一次数据以满足批量处理的需求,在__getitem__()方法中返回一张图片时,请注意以下几点:其中img变量存储的是C×H×W的数据类型,在外部操作中你会得到N×C×H×W的数据结构(即当你调用torch.stack(batch, 0, out=out)进行堆叠)。由于默认情况下已经进行了torch.stack()操作以组合多个样本批次的数据张量(out参数用于指定结果张量的位置),因此如果你在不同批次之间获取到不一致的图像数据(即每次调用__getitem__()得到的不同img对象),就可能导致程序运行出现错误。
有人认为我采用了一种简单的做法:直接设置数据集的最大H和W值作为统一尺寸,并收集每张图片的h和w信息后输出并返回padded_img及其对应的h和w值。在外部处理时考虑这些信息。
但是存在的情况是:有时候每次返回的张量通道数量非常大(上千上万),而有时候却非常有限(甚至只有几个)。类似这种情况下(即不同批次的数据大小差异极大!),你肯定不愿意直接对不同大小的数据进行填充(padding)成最大的尺寸吧?我们希望的是,在处理一批数据时,默认不会直接堆叠所有样本而是根据每个样本的具体尺寸进行适配性处理
我们希望可以这
全部评论 (0)
还没有任何评论哟~
