RuntimeError: Expected object of scalar type Float but got scalar type Double for argument #2 ‘mat1’ in call to _th_addmm的错误
出错代码是output = model(img, da).data.cpu().numpy(),在一个混合类型数据输入的模型中,forward时产生报错,调用的两个参数数据类型不同。前者源自于图片,后者源自于numpy数组。
torchvision.transforms.ToTensor()
图片的dtype源自于transforms.ToTensor(),该函数可以将PILImage或者numpy的ndarray转化成Tensor,在转换PILImage时,默认转换后的dtype是torch.float32;在用于numpy的ndarray时取决于原本的dtype。
torch.Tensor()和torch.tensor()
在报错原代码中是使用DataLoader直接读取numpy数组,默认保持了numpy数组的默认类型float64,可以将其转换为torch.float32类型。torch.Tensor()是torch中的类,可以默认地生成torch.FloatTensor,即其dtype为torch.float32()。而torch.tensor()是torch中的函数,是将对象转变为Tensor,但其dtype取决于原有类型,若使用于numpy数组,则默认转变为torch.DoubleTensor。