为什么不't转换张量固定的dtype"t";RuntimeError:应为标量类型Doubl



我的代码的重要部分如下:

def forward(self, x):
x = T.tensor(x).to(self.device)
x = x.type(T.DoubleTensor)
x = self.conv1(x)
...

然而,我仍然在该片段的最后一行得到错误expected scalar type Double but found 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层的weightbias参数相同的类型(假设这是nn.Conv*d层(。

def forward(self, x):
x = T.tensor(x, device=self.device, dtype=self.conv1.weight.dtype)
x = self.conv1(x)
...

最有可能的self.conv1.weight.dtype将只是torch.float32。除非您使用model.to(dtype=torch.float64)之类的东西明确地更改了模型参数类型,否则您可以等效地只使用

def forward(self, x):
x = T.tensor(x, device=self.device, dtype=torch.float32)
x = self.conv1(x)
...

错误消息具有误导性。您应该将原始数据的dtype转换为float32,而不是double

我是如何修复的:

data_X = np.array(data.iloc[:, 2:7], dtype='float32')
data_y = np.array(data['output'], dtype='float32')

最新更新