繁体   English   中英

为什么不转换 Tensor 的 dtype 修复“运行时错误:预期标量类型 Double 但发现 Float”?

[英]Why doesn't converting the dtype of a Tensor fix "RuntimeError: expected scalar type Double but found Float"?

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

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在该代码段的最后一行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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM