这个错误是可能是由于在DataLoader的工作进程中尝试访问CUDA设备导致的。PyTorch的DataLoader使用多进程加载数据,而CUDA上下文不能在子进程中直接使用。
修改前的代码为:
def prepare_data(file_path):# 读取Excel文件df = pd.read_excel(file_path, header=None)df = df.iloc[1:]print(df)# 提取特征和标签features = df.iloc[:, :-1].values.astype('float32') # extract featurelabels = df.iloc[:, -1].values.astype('int64') # extract label# 数据标准化scaler = StandardScaler()features = scaler.fit_transform(features)# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)# 转换为PyTorch张量并移动到设备X_train = torch.tensor(X_train, device=device)X_test = torch.tensor(X_test, device=device)y_train = torch.tensor(y_train, device=device)y_test = torch.tensor(y_test, device=device)return X_train, X_test, y_train, y_test, scaler
数据加载修改为下运行OK:
class ExcelDataset(Dataset):def __init__(self, features, labels):# 确保数据在CPU上self.features = features.cpu() if features.is_cuda else featuresself.labels = labels.cpu() if labels.is_cuda else labels