赞
踩
查到了两个解决方案,其一如下,经过查验不是这个原因造成了我的错误:
原链接:https://www.cnblogs.com/zxj9487/p/11531888.html
这种错误有两种可能:
1.你输入的图像数据的维度不完全是一样的,比如是训练的数据有100组,其中99组是256*256,但有一组是384*384,这样会导致Pytorch的检查程序报错
2.比较隐晦的batchsize的问题,Pytorch中检查你训练维度正确是按照每个batchsize的维度来检查的,比如你有1000组数据(假设每组数据为三通道256px*256px的图像),batchsize为4,那么每次训练则提取(4,3,256,256)维度的张量来训练,刚好250个epoch解决(250*4=1000)。但是如果你有999组数据,你继续使用batchsize为4的话,这样999和4并不能整除,你在训练前249组时的张量维度都为(4,3,256,256)但是最后一个批次的维度为(3,3,256,256),Pytorch检查到(4,3,256,256) != (3,3,256,256),维度不匹配,自然就会报错了,这可以称为一个小bug。
其二如下,其中使用了transforms.Resize(224)是我的错误原因:
原链接:https://www.jianshu.com/p/9e866d02ddbd
有两种可能:
一:transforms没有把数据集中的图片转换成想要的尺寸大小,如Resnet等网络输入需要224x224大小的图像,在Resize时,不能用 transforms.Resize(224),而因该用transforms.Resize([224, 224]),官方文档有函数解释
二. 可能是因为自己的数据集中既有RGB图像也有灰度图像,通道不统一
参考https://discuss.pytorch.org/t/runtimeerror-invalid-argument-0-sizes-of-tensors-must-match-except-in-dimension-0-got-3-and-2-in-dimension-1/23890
可以通过以下方法解决:
在__getitem__() 方法中添加 image= Image.open(image).convert('RGB')
作者:爬的慢的蜗牛
链接:https://www.jianshu.com/p/9e866d02ddbd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。