无法转换numpy.bool _

时间:2019-05-18 23:09:03

标签: pytorch

我想知道为什么我在使用时遇到此错误:

Y_train_class = torch.tensor(Y_train_class.values)
  

TypeError:无法转换numpy.bool_类型的np.ndarray。唯一受支持的类型为:double,float,float16,int64,int32和uint8。

我试图将数据转换为float,但似乎失败了

X_train = pd.read_csv('c:/Data/x_train_set_yu.csv', header= None)
Y_train = pd.read_csv('c:/Data/y_train_set_yu.1.csv', header= None)

Y_train_class = (Y_train >= 550)
print (Y_train_class)
X_test = pd.read_csv('c:/Data/X_test.csv',header= None)

X_train = torch.tensor(X_train.values)

Y_train.astype(np.float32)
Y_train_class.astype(np.float32)

Y_train_class = torch.tensor(Y_train_class.values)
  

TypeError:无法转换numpy.bool_类型的np.ndarray。唯一受支持的类型为:double,float,float16,int64,int32和uint8。

1 个答案:

答案 0 :(得分:0)

您通常遵循正确的方法,只是没有使用numpy astype。所以代替

Y_train_class.astype(np.float32)

您需要拥有

Y_train_class = Y_train_class.astype(np.float32)

(当前实际上无法执行原始的Y_train_class.astype(np.float32))。

如果您的目标是使用诸如nn.BinaryCrossEntropy之类的损失函数进行训练,则您强制转换为float的方法是正确的,因为他们希望0/1类仍然是float32。在一般情况下,PyTorch使用uint8张量来代替布尔张量,因此要获得与原始numpy张量等效的功能,您应该使用torch.from_numpy(Y_train_class.astype(np.uint8))-然后它正确地支持numpy中的掩码操作,下面的例子

import torch
import numpy as np

test_vals = np.array([1, 3, 3])
array = np.array([True, True, False], dtype=np.bool)
print(test_vals[array])

test_vals = torch.from_numpy(test_vals)
tensor = torch.from_numpy(array.astype(np.uint8))
print(test_vals[tensor])

最后,据我所知,布尔张量将在将来的版本中引入PyTorch。