利用Pytorch框架自己构建网络结构,在程序运行到“loss.backward()”的时候报错:
RuntimeError: expected dtype Double but got dtype Float (validate_dtype at ..\aten\src\ATen\native\TensorIterator.cpp:143)
(no backtrace available)
通过查询资料得知,该错误来自于输入数据的类型和模型参数类型不一致。因此最好在程序开始统一数据类型。
Pytorch里的tensor创建时默认是Torch.FloatTensor类型(torch.float32),
可通过在import语句后增加语句
torch.set_default_tensor_type(torch.DoubleTensor)
这样之后创建的变量类型都是Double类型(torch.float64)。
如果想要创建变量类型都是Float类型,在import后增加语句
torch.set_default_tensor_type(torch.FloatTensor)
后,执行卷积操作时会报错:
RuntimeError: Expected object of scalar type Double but got scalar type Float for argument #3 'mat1' in call to _th_addmm_
这是因为numpy的默认数据类型为float64,如果根据torch.from_numpy创建tensor,如b = torch.from_numpy(a),a和返回的b共享一块内存