這個錯誤是可能是由于在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