使用torch.tensor转换numpy.bool_数组报错,求原因及解决方法
解决PyTorch无法转换numpy.bool_类型为张量的问题
嘿,我一眼就看到问题出在哪了——你的astype调用根本没生效!
Pandas的astype()方法是非原地修改的,也就是说它会返回一个转换后的新DataFrame,但不会改变原来的变量。你之前写的Y_train_class.astype(np.float32)只是生成了一个float类型的临时对象,却没把它赋值回Y_train_class,所以这个变量依然是布尔类型的,转PyTorch张量的时候自然就触发那个类型不支持的错误了。
给你两个简单的解决办法,选哪个都行:
方法一:创建布尔判断时直接转换类型
在生成Y_train_class的同时就把它转成PyTorch支持的数值类型,一步到位:
import pandas as pd import numpy as np import torch 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) # 直接将布尔结果转为float32类型 Y_train_class = (Y_train >= 550).astype(np.float32) # 要是你用int类型也可以,比如int32,PyTorch也支持 # Y_train_class = (Y_train >= 550).astype(np.int32) X_test = pd.read_csv('c:/Data/X_test.csv', header=None) X_train = torch.tensor(X_train.values) Y_train_class = torch.tensor(Y_train_class.values)
方法二:转张量时指定目标类型
如果你不想修改原DataFrame,也可以在调用torch.tensor()的时候直接指定dtype参数,强制转换类型:
# 保留原来的布尔判断,转张量时指定dtype Y_train_class = torch.tensor(Y_train_class.values, dtype=torch.float32) # 同样也可以用int类型 # Y_train_class = torch.tensor(Y_train_class.values, dtype=torch.int32)
另外提一句,PyTorch确实不支持直接把numpy的布尔数组转成张量,所以必须转成它支持的类型——比如float32、int32、int64这些都没问题,具体选哪个看你的任务需求就行(比如分类任务用int类型完全ok)。
内容的提问来源于stack exchange,提问作者yctsao
相关产品推荐
相关产品推荐

