机器学习新手求助:如何用全新数据测试已训练模型?
嘿,别着急!作为机器学习新手,遇到这种情况太正常啦~我来一步步帮你搞定用全新数据测试模型的问题。
步骤1:确保全新测试数据和训练/验证数据格式一致
- 新数据得和你训练时用的数据“长得一模一样”:特征数量、特征类型(数值/分类)、标签格式(如果是分类任务)都要匹配。不然模型可没法正确识别它哦。
步骤2:加载你训练好的模型
- 如果你之前训练完模型后保存过它(比如Keras的
model.save()或者PyTorch的torch.save()),先把它加载回来:- TensorFlow/Keras 示例:
from tensorflow.keras.models import load_model model = load_model('你的模型文件名.h5') - PyTorch 示例:
import torch # 先定义和训练时完全一样的模型结构 model = YourModelArchitecture() model.load_state_dict(torch.load('你的模型权重.pth')) model.eval() # 一定要切换到评估模式!
- TensorFlow/Keras 示例:
步骤3:对新数据做和训练数据完全相同的预处理
- 这一步是核心!你训练时对数据做的所有操作(比如标准化、归一化、分类特征编码、图片尺寸调整等),必须原封不动地用到新数据上。举个例子:
# 假设你训练时用了StandardScaler做特征标准化 from sklearn.preprocessing import StandardScaler import joblib # 注意:要用训练数据拟合好的scaler,绝对不能用新数据重新拟合! scaler = joblib.load('训练时保存的scaler.pkl') # 对新测试数据做标准化 new_test_data_processed = scaler.transform(new_test_data)
步骤4:用模型评估全新测试数据的准确率
- 现在就可以用处理好的新数据测试啦:
- TensorFlow/Keras 示例(有标签的情况):
test_loss, test_acc = model.evaluate(new_test_data_processed, new_test_labels) print(f"全新测试数据的准确率: {test_acc * 100:.2f}%") # 如果没有标签,只想得到预测结果 predictions = model.predict(new_test_data_processed) - PyTorch 示例(有标签的情况):
import torch # 把数据转换成和训练时一致的张量格式 new_test_tensor = torch.tensor(new_test_data_processed, dtype=torch.float32) new_test_labels_tensor = torch.tensor(new_test_labels, dtype=torch.long) with torch.no_grad(): # 评估阶段不需要计算梯度,节省资源 outputs = model(new_test_tensor) _, predicted = torch.max(outputs.data, 1) total = new_test_labels_tensor.size(0) correct = (predicted == new_test_labels_tensor).sum().item() test_acc = correct / total print(f"全新测试数据的准确率: {test_acc * 100:.2f}%")
- TensorFlow/Keras 示例(有标签的情况):
额外小提醒
- 如果你之前没保存模型和预处理工具(比如scaler),得重新训练一次模型,然后把这些组件都存下来,下次就能直接复用啦。
- 要是新数据没有标签,你没法计算准确率,但可以看看预测结果的分布,或者做些可视化来大致判断模型的表现。
内容的提问来源于stack exchange,提问作者Ali Ali
相关产品推荐
相关产品推荐

