【问题标题】:Can’t convert np.ndarray of type numpy.bool_无法转换 numpy.bool_ 类型的 np.ndarray
【发布时间】:2019-10-05 19:07:21
【问题描述】:

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

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。

【问题讨论】:

  • 您能否发布一些 y_train_set_yu.1.csv 文件的条目以更好地理解问题?我认为您因为 float('True')/float('False') 而出错。布尔值无法解析为浮点数。

标签: pytorch


【解决方案1】:

当我的Y_train 有一个字符串值而不是整数时,我得到了这种类型的错误。用整数替换字符串后,我的错误得到了解决。

【讨论】:

    【解决方案2】:

    您通常遵循正确的方法,除了 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)) - 然后它正确支持 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。

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 2019-09-07
      • 2020-07-06
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多