Python 为什么';t转换张量固定点的数据类型“;运行时错误:应为标量类型Double,但找到Float“;?
我的代码的重要部分如下所示:Python 为什么';t转换张量固定点的数据类型“;运行时错误:应为标量类型Double,但找到Float“;?,python,pytorch,cnn,Python,Pytorch,Cnn,我的代码的重要部分如下所示: def forward(self, x): x = T.tensor(x).to(self.device) x = x.type(T.DoubleTensor) x = self.conv1(x) ... 但是我仍然得到错误预期的标量类型Double,但在该代码段的最后一行发现Float。行x=x.type(T.DoubleTensor)应该可以解决这个问题,对吗?我还尝试了x=x.double()和
def forward(self, x):
x = T.tensor(x).to(self.device)
x = x.type(T.DoubleTensor)
x = self.conv1(x)
...
但是我仍然得到错误
预期的标量类型Double,但在该代码段的最后一行发现Float
。行x=x.type(T.DoubleTensor)
应该可以解决这个问题,对吗?我还尝试了x=x.double()
和x=T.tensor(x,dtype=T.double).to(self.device)
作为前一行,但仍然得到了错误。我不知所措,我做错了什么?PyTorch希望层的输入与层的参数具有相同的设备和数据类型(dtype)。对于大多数层(包括conv层),默认数据类型为torch.float32
,即FloatTensor
要解决您的问题,您可以将x
转换为与self.conv1
层的weight
或bias
参数相同的类型(假设这是nn.Conv*d
层)
def转发(自身,x):
x=T.tensor(x,device=self.device,dtype=self.conv1.weight.dtype)
x=自转换1(x)
...
最有可能的self.conv1.weight.dtype
就是torch.float32
。除非您使用类似于model.to(dtype=torch.float64)
的东西显式地更改了模型参数类型,否则您可以使用
def转发(自身,x):
x=T.tensor(x,device=self.device,dtype=torch.float32)
x=自转换1(x)
...
PyTorch希望层的输入与层的参数具有相同的设备和数据类型(dtype)。对于大多数层(包括conv层),默认数据类型为torch.float32
,即FloatTensor
要解决您的问题,您可以将x
转换为与self.conv1
层的weight
或bias
参数相同的类型(假设这是nn.Conv*d
层)
def转发(自身,x):
x=T.tensor(x,device=self.device,dtype=self.conv1.weight.dtype)
x=自转换1(x)
...
最有可能的self.conv1.weight.dtype
就是torch.float32
。除非您使用类似于model.to(dtype=torch.float64)
的东西显式地更改了模型参数类型,否则您可以使用
def转发(自身,x):
x=T.tensor(x,device=self.device,dtype=torch.float32)
x=自转换1(x)
...
好的,好的。我真的被甩了,因为错误似乎表明预期的数据类型是双精度的,我想我已经将其设置为双精度了。但是,当然,你是对的,它是float32,虽然我认为这是双倍的,但无论如何,设置为float32修正了它,谢谢!对,好。我真的被甩了,因为错误似乎表明预期的数据类型是双精度的,我想我已经将其设置为双精度了。但是,当然,你是对的,它是float32,虽然我认为这是双倍的,但无论如何,设置为float32修正了它,谢谢!