PyTorch模型构建问题:标签被误纳入特征张量如何解决?
解决方案:分离PyTorch数据集的特征与标签字段
问题核心是标签字段Price_Night未被正确从特征集中排除,以下是两种直接有效的修复方式:
1. 修复load_airbnb函数(根源解决)
问题大概率出在load_airbnb函数未移除标签列,修改该函数确保特征集不包含目标字段:
def load_airbnb(data, label_col): # 提取标签列 label = data[label_col] # 从原始数据中删除标签列,得到纯特征集 features = data.drop(columns=[label_col]) # 若有其他预处理(如标准化、编码)可在此添加 return features.values, label.values
这个方法从数据源头分离特征与标签,是最规范的处理方式。
2. 无法修改load_airbnb时,在Dataset中手动移除标签列
如果不能改动load_airbnb函数,可在Dataset初始化阶段手动剔除特征中的标签列:
class AirbnbNightlyPriceImageDataset(Dataset): def __init__(self) -> None: self.data = pd.read_csv('tabular_data/clean_tabular_data.csv') self.features, self.label = load_airbnb(self.data, 'Price_Night') # 获取标签列在原始数据中的索引位置 label_col_index = self.data.columns.get_loc('Price_Night') # 从特征数组中删除对应列 self.features = np.delete(self.features, label_col_index, axis=1) def __len__(self): return len(self.data) def __getitem__(self, idx): features = self.features[idx,:] features = torch.tensor(features, dtype=torch.float32) label = self.label[idx].item() return (features, label)
验证修复效果
运行以下代码确认特征与标签已完全分离:
example = next(iter(train_loader)) print("特征张量形状:", example[0].shape) print("特征数据:", example[0]) print("标签数据:", example[1])
正常情况下,特征张量的列数会比原来少1,且特征中不再出现与标签一致的数值(如示例中的49、231)。
内容的提问来源于stack exchange,提问作者Lewis-010
相关产品推荐
相关产品推荐

