我想知道为什么我在使用时遇到此错误:
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。
答案 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。