Pytorch RuntimeError:应为torch.DoubleTensor类型的对象,但找到参数#2'的torch.FloatTensor类型;重量';

Pytorch RuntimeError:应为torch.DoubleTensor类型的对象,但找到参数#2'的torch.FloatTensor类型;重量';,pytorch,Pytorch,我的输入张量是torch.DoubleTensor类型。但是我得到了下面的运行时错误: RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight' 我没有明确指定权重的类型(即,我没有自己初始化权重。权重是由Pytork创建的)。什么会影响前进过程中的重量类型 非常感谢 权重和偏差的默认类型为torch.FloatTensor

我的输入张量是torch.DoubleTensor类型。但是我得到了下面的运行时错误:

RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight'
我没有明确指定权重的类型(即,我没有自己初始化权重。权重是由Pytork创建的)。什么会影响前进过程中的重量类型


非常感谢

权重
和偏差
的默认类型为
torch.FloatTensor
。因此,您需要将模型转换为
torch.DoubleTensor
或将输入转换为
torch.FloatTensor
。对于铸造您的输入,您可以这样做

X = X.float()
或者将整个模型转换为
DoubleTensor
as

model = model.double()
还可以使用设置所有张量的默认类型

pytorch.set_default_tensor_type('torch.DoubleTensor')

最好将您的输入转换为
float
,而不是将您的模型转换为
double
,因为在GPU上对
double
数据类型的数学计算要慢得多。

我也收到了完全相同的错误。根本原因是我的数据加载代码中的以下语句:

t = t.astype(np.float)
这里np.float转换为64位float,它映射到双张量。所以把这个改成

t = t.astype(np.float32)

解决了这个问题。

在我通过.float()将输入类型转换为FloatTensor之后。代码可以正确处理。但我仍然不知道如果我想要双张量输入……非常感谢你的回答!!顺便说一句,我遇到了另一个关于加载模型的问题。IDE raise
UnicodeDecodeError:“ascii”编解码器无法解码位置918处的字节0xc3:序号不在范围内(128)
当我使用
model=torch.load(“file.pth”)
时出错(ps:The.pth文件来自某个地方,它不是我自己训练的。我训练的pth文件可以使用
torch.load
加载).再次感谢!这可能是因为模型是使用Python3创建(并保存)的,Python3的默认编码是utf-8,但是您使用的是Python2。在python文件的顶部添加
#-*-编码:utf-8-*-
。此外,保存和加载完整模型也不是一个好的做法。这可以通过多种方式打破。有关模型的正确序列化,请参阅“非常感谢”。但我用的是蟒蛇3。。。我在pyhton文件的顶部添加了
-*-coding:utf-8-*-
。它不起作用…然后您可以尝试在python2中加载模型。有关更多详细信息,请参阅GitHubForMewithTorch0.4.1,它不是pytorch.set(…),而是torch.set(…)