PyTorch加载.pt文件预测CSV单条数据时出现AttributeError问题求助
问题分析与解决
错误根源
你在预测代码里直接对TensorDataset对象调用了unsqueeze()方法,但TensorDataset只是个数据集容器,本身没有张量的方法——只有它内部包裹的张量才能用unsqueeze()。
具体修正步骤
1. 调整单条数据的处理逻辑
把对TensorDataset的操作改成提取内部张量后再处理:
- 错误写法(触发报错):
dataset = TensorDataset(data_tensor) dataset = dataset.unsqueeze(0) # 这里把数据集当成张量操作,必然报错
- 正确写法:
dataset = TensorDataset(data_tensor) # 取出数据集里的特征张量,再补batch维度 input_tensor = dataset[0][0].unsqueeze(0)
2. 完整可运行的预测代码示例
import torch import pandas as pd from torch.utils.data import TensorDataset # 加载训练好的模型 model = torch.load('best3.pt') model.eval() # 切换到评估模式,关闭训练专属层 # 加载单条无标签数据 data = pd.read_csv('onedata.csv').values data_tensor = torch.tensor(data, dtype=torch.float32) # 处理数据:提取张量并补batch维度(模型默认接收批量输入) dataset = TensorDataset(data_tensor) input_tensor = dataset[0][0].unsqueeze(0) # 执行预测 with torch.no_grad(): # 关闭梯度计算,节省资源 output = model(input_tensor) pred_class = torch.argmax(output, dim=1).item() print(f"预测类别:{pred_class}")
3. 额外注意点
- 确保单条数据的特征数量和训练集完全一致,不然模型会报错维度不匹配
- 数据类型要和训练时统一(比如都用
float32) - 模型加载后必须加
model.eval(),避免dropout、BatchNorm等层干扰预测结果
内容的提问来源于stack exchange,提问作者RobertLink
相关产品推荐
相关产品推荐

