Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么';t转换张量固定点的数据类型“;运行时错误:应为标量类型Double,但找到Float“;?_Python_Pytorch_Cnn - Fatal编程技术网

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修正了它,谢谢!