评估决定模型命运。混淆矩阵、ROC曲线、误差分析、数据迭代,这是让模型从"能用"到"好用"的关键环节。
调整下面的滑块,实时观察 Accuracy/Precision/Recall/F1 的变化
💡 行业经验:每迭代一轮,效果提升 2-5%。3-5轮迭代后通常能达到上线标准。
# 方法1:保存state_dict(推荐) torch.save(model.state_dict(), 'models/final/best_model.pt') # 方法2:保存完整模型 torch.save(model, 'models/final/best_model.pt') # 方法3:ONNX格式(跨平台部署) dummy = torch.randn(1, 3, 224, 224) torch.onnx.export(model, dummy, 'model.onnx') # 方法4:TorchScript(移动端) traced = torch.jit.trace(model, dummy) traced.save('model_scripted.pt') # 方法5:保存训练状态(断点续训) torch.save({ 'epoch': epoch, 'model_state_dict': model.state_dict(), 'optimizer_state_dict': optimizer.state_dict(), 'best_val_acc': best_acc, }, 'checkpoint.pth')
import torch from PIL import Image from torchvision import transforms # 1. 加载模型 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = MyModel(num_classes=5) model.load_state_dict(torch.load('models/best.pt', map_location=device)) model = model.to(device) model.eval() # 重要!切换到评估模式 # 2. 数据预处理(必须和训练时一致!) transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize([0.485], [0.229]) ]) # 3. 推理 def predict(image_path): img = Image.open(image_path).convert('RGB') tensor = transform(img).unsqueeze(0).to(device) # 加batch维度 with torch.no_grad(): # 关闭梯度计算 output = model(tensor) probs = torch.softmax(output, dim=1) pred_idx = probs.argmax(1).item() confidence = probs[0, pred_idx].item() return { 'class': class_names[pred_idx], 'confidence': f'{confidence:.2%}', 'all_probs': {class_names[i]: f'{p:.2%}' for i, p in enumerate(probs[0])} } result = predict('test_image.jpg') print(result)