模型训练时错误:RuntimeError: stack expects each tensor to be equal size 解决
问题描述
在用ResNet训练一个分类任务的时候,发现精度始终维持在80左右。review代码时发现了问题,在数据transform时做了随机裁剪。由于我要分类的任务是要判断电路板的完整性,随机裁剪后可能会导致裁剪后的图片与原标签不符。于是我尝试删除裁剪部分,替换成了水平和垂直翻转,并把resize改成了统一大小。但是修改之后训练报错:
1 | RuntimeError: stack expects each tensor to be equal size, but got [3, 224, 336] at entry 0 and [3, 224, 253] at entry 1 |
这个问题说明输入的Tensor维度不一致,而且从报错信息可以看出只有最后一维的大小不一致。
解决方法
出现这一问题的原因是我在transforms.Resize(224)
中只输入了一个整数,那么在resize时它会把图像的较小的一边resize成224,另一边等比缩放,因此出现上述错误。
解决方法就是在resize时传入一个tuple指定两个边resize的大小,写成transforms.Resize((224,256)
这种形式,指定两个维度的resize大小就能解决这个问题。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自DaneSun's Blog
评论
匿名评论
✅ 你无需删除空行,直接评论以获取最佳展示效果