问题描述

在用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大小就能解决这个问题。