DataLoader问题解决:RuntimeError: stack expects each tensor to be equal size, but got [3, 200, 200]entry1
最近,在数据集处理并载入DataLoader进行训练的时候出现了问题:
RuntimeError: stack expects each tensor to be equal size,
but got [3, 200, 200] at entry 0 and [1, 200, 200] at entry 1
我看了一下,大意就是维度也就是通道数不匹配,所以我觉得应该是数据集图片出现了问题。以下是我的普通数据集处理代码:
import torch
import torchvision.transforms as transforms
from torch.utils.data import Dataset, DataLoader
import os
from PIL import Imagetransform = transforms.Compose([transforms.RandomCrop((200, 200)), #需要进行同意大小,不然会报错transforms.ToTensor(),
])class PreprocessDataset(Dataset):"""预处理数据集类"""def __init__(self, HRPath):"""初始化预处理数据集类"""img_names = os.listdir(HRPath)self.HR_imgs = [HRPath + "/" + img_name for img_name in img_names]def __len__(self):"""获取数据长度"""return len(self.HR_imgs)def __getitem__(self, index):"""获取数据"""HR_img = self.HR_imgs[index]HR_img = Image.open(HR_img)HR_img = transform(HR_img)return HR_img if __name__ == '__main__':HRPath = r"D:\datasets\ImageNet\train"datasets = PreprocessDataset(HRPath)trainData = DataLoader(datasets, batch_size=1, shuffle=False)for i, HR_img in enumerate(trainData):print(i, HR_img.shape)
我一张一张图片放入DataLoader,然后按顺序一张一张的查看它们的维度,然后出现如下错误:
'''结果'''
146 torch.Size([1, 3, 200, 200])
147 torch.Size([1, 3, 200, 200])ValueError: empty range for randrange() (0,-55, -55)
我找到出错前按顺序查到了第149(从0开始)张图片的维度,点开发现这张图片的最短边小于200,不能进行随机裁剪transforms.RandomCrop((200, 200)),所以我进行了transforms.Resize(400),把图片最短边放大到400。
transform = transforms.Compose([transforms.Resize(400),transforms.RandomCrop((200, 200)), #需要进行同意大小,不然会报错transforms.ToTensor(),
])
在次运行并不发生错误,但这是在DataLoader的batch_size=1张图片的情况下。所以把batch_size改成多张图片再次运行:
if __name__ == '__main__':HRPath = r"D:\datasets\ImageNet\train"# os.listdir(HRPath)datasets = PreprocessDataset(HRPath)a = datasets[89]print(a.shape)trainData = DataLoader(datasets, batch_size=16, shuffle=False)for i, HR_img in enumerate(trainData):print(i, HR_img.shape)
发生错误:
'''结果'''
0 torch.Size([16, 3, 200, 200])
1 torch.Size([16, 3, 200, 200])
2 torch.Size([16, 3, 200, 200])
3 torch.Size([16, 3, 200, 200])
4 torch.Size([16, 3, 200, 200])RuntimeError: stack expects each tensor to be equal size,
but got [3, 200, 200] at entry 0 and [1, 200, 200] at entry 9
从不出错的结果上看,定位图片问题所在的索引应该在80-96之间,那么缩小问题图片的方位,把batch_size=2:
if __name__ == '__main__':HRPath = r"D:\datasets\ImageNet\train"# os.listdir(HRPath)datasets = PreprocessDataset(HRPath)a = datasets[89]print(a.shape)trainData = DataLoader(datasets, batch_size=2, shuffle=False)for i, HR_img in enumerate(trainData):print(i, HR_img.shape)
错误定位到第89或者第90张图片:
'''结果'''
0 torch.Size([2, 3, 200, 200])
...
...
43 torch.Size([2, 3, 200, 200])RuntimeError: stack expects each tensor to be equal size, but got [3, 200, 200] at entry 0 and [1, 200, 200] at entry 1
输出第89张图片的维度:
if __name__ == '__main__':HRPath = r"D:\datasets\ImageNet\train"# os.listdir(HRPath)datasets = PreprocessDataset(HRPath)a = datasets[89]print(a.shape)
结果:
torch.Size([1, 200, 200])
真的是通道数不统一,醉了啊!
解决方法,在图片预处理的时候,将所有图片都转成"RGB"三通道的模式:
HR_img = Image.open(HR_img).convert('RGB') #全部以三通道形式打开
解决完成!!!!
DataLoader问题解决:RuntimeError: stack expects each tensor to be equal size, but got [3, 200, 200]entry1相关推荐
- RuntimeError: stack expects each tensor to be equal size, but got xxx at entry 0 at entry 1
今日做模型训练,Pytorch在加载数据时遇到如下错误: Epoch 1/800: 31%|███ | 4/13 [00:03<00:07, 1.27img/s, loss (batch)=1. ...
- RuntimeError: stack expects each tensor to be equal size
在调试densenet进行分类任务的代码时,在图像预处理的过程中遇到下列错误: RuntimeError: stack expects each tensor to be equal size, bu ...
- RuntimeError: stack expects each tensor to be equal size, but got [8] at entry 0 and [2] at entry 2
最近在调试pytorch代码的时候遇到如下问题,由于他报错的地方不是在我们自己写的代码,而是在pytorch的包里,所以一开始就一头雾水. 在查阅了资料以后http://www.zzvips. ...
- stack expects each tensor to be equal size, but got [3, 224, 224] at entry 0 and [1,224,224] at entr
首先可以确定地是在数据读取的以及处理发生的问题.目前可以归纳为一下两种: 1:使用Image.open()没有添加.convert('RGB') 错误代码例子: class Mydataset(dat ...
- stack expects each tensor to be equal size, but got [3, 40, 160] at entry 0 and [4, 40, 160] at entr
这个问题是通道数不一样导致的,本质上是图像的问题 加载图像时加上.convert('RGB')即可 data = Image.open(imgPath).convert('RGB')
- 解决RuntimeError: stack expects a non-empty Tensorlist问题
在batch_size时,可能某些地方需要batch>1的时候才能运行,但在创建dataloader时,可能最后一个batch的大小正好为1,所以会导致这种错误. 为了解决这种情况,将datal ...
- RuntimeError: each element in list of batch should be of equal size
RuntimeError: each element in list of batch should be of equal size 示例代码: import os import re from t ...
- 问题解决 docker stack 部署后 REPLICAS 为 0
原文 https://blog.csdn.net/u013054888/article/details/90741042 问题描述 使用 docker stack deploy -c docker-c ...
- Cityscapse 数据集使用 + 训练 STDC踩坑
官网地址:Cityscapes Dataset – Semantic Understanding of Urban Street Scenes (cityscapes-dataset.com) get ...
最新文章
- 操作系统学习2:操作系统的发展和概览
- 上传图片和导出文件测试用例
- 解决windows找不到D:launcher\launcher.exe的方法
- Zabbix监控agent
- 我的世界java版和基岩版对比_我的世界:基岩版比Java多出的七个特性,都听过的非老mc莫属了!...
- LeetCode之Island Perimeter
- [XSY3381] 踢罐子(几何)
- (转)在阿里,我们如何管理代码分支?
- 【HDU - 6184】Counting Stars(三元环计数,二分,优化暴力,O(m*sqrt(m)),图论)
- python基础元组和列表区别(六)
- 这有8个小秘诀,让你更懂CSS!
- 折扇的保养方法是什么?
- 华为P7电信4G版刷机包 EMUI2.3 官方B125 第3版 精简 ROOT
- Programming WCF Services翻译笔记(八)
- 思科交换机配置试题_思科交换机配置命令
- 测试篇之一 sd卡独写速度测试
- 3dmax java,基于Java 3D与3DS MAX的虚拟校园设计
- 算法导论--麻省理工学院公开课
- Java DateUtil 时间工具类
- ttys和tty_Linux中tty、pty、/dev/ttySn等概念讲解