我想知道为什么当我使用:
Y_train_class = torch.tensor(Y_train_class.values)TypeError:不能转换numpy.bool_类型的np.ndarray。唯一受支持的类型是: double、float、float16、int64、int32和uint8。
我试图将我的数据转换为浮动,但似乎失败了。
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。
发布于 2019-05-19 19:31:05
您通常遵循正确的方法,除非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 )进行训练,那么您的浮点转换方法是正确的,因为他们期望0/1类无论如何都是float32。在一般情况下,PyTorch使用uint8张量来代替布尔张量,因此要获得与原始numpy张量相当的功能,您应该使用torch.from_numpy(Y_train_class.astype(np.uint8)) -然后它正确地支持掩蔽操作,如下面的示例
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。
https://stackoverflow.com/questions/56203536
复制相似问题