[英]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
层的weight
或bias
参数相同的类型(假设这是一个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.