我的输入张量是torch.DoubleTensor类型。但是我收到了以下运行时错误:
RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight'
我没有明确指定权重的类型(即我没有自己初始化我的权重。这些权重是由pytorch创建的)。在前向过程中会影响权重类型的因素是什么?
非常感谢!!
我的输入张量是torch.DoubleTensor类型。但是我收到了以下运行时错误:
RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight'
我没有明确指定权重的类型(即我没有自己初始化我的权重。这些权重是由pytorch创建的)。在前向过程中会影响权重类型的因素是什么?
非常感谢!!
weights
和biases
的默认类型是torch.FloatTensor
,所以您需要将模型转换为torch.DoubleTensor
或将输入转换为torch.FloatTensor
。要转换输入,可以执行以下操作:
X = X.float()
或者将您的完整模型转换为 DoubleTensor
,如下所示:
model = model.double()
您还可以使用以下方法为所有张量设置默认类型:
pytorch.set_default_tensor_type('torch.DoubleTensor')
最好将您的输入转换为float
而不是将模型转换为double
,因为在GPU上处理double
数据类型的数学计算速度较慢。
model = torch.load("file.pth")
时,IDE会引发UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 918: ordinal not in range(128)
错误(附注:.pth文件来自某个地方,并不是我自己训练的。我自己训练的pth文件可以使用torch.load
加载)。再次感谢! - Eric Kani# -*- coding: utf-8 -*-
。此外,保存和加载完整模型不是一个好的做法。这可能会以多种方式破坏模型。有关正确序列化模型的信息,请参见官方文章。 - layog-*- coding: utf-8 -*-
。但它不起作用…… - Eric Kani0.4.0
中已经更新,而这个代码是适用于 0.3.1
的。欢迎修改,否则我将在最新版本上进行测试并更新答案。 - layogt = t.astype(np.float)
t = t.astype(np.float32)