如何获取训练后CNN手势识别模型的验证准确率?
如何获取已训练CNN手势识别模型的验证准确率
一、针对已训练完成但未记录val_acc的情况
如果你已经保存了训练好的模型,最直接的方法是用预留的验证数据集重新评估模型:
- 确保你有独立的验证数据集(绝对不能用训练集,否则结果会严重失真)
- 加载你的训练好的模型:
# TensorFlow/Keras示例 import tensorflow as tf model = tf.keras.models.load_model('your_trained_model.h5') - 用
evaluate方法直接计算验证准确率:# 如果验证数据是分离的特征x_val和标签y_val val_loss, val_acc = model.evaluate(x_val, y_val, verbose=1) print(f"验证准确率: {val_acc:.4f}") # 如果验证数据是TensorFlow Dataset对象 val_loss, val_acc = model.evaluate(validation_dataset, verbose=1)
如果用的是PyTorch框架,步骤类似,但需要手动统计准确率:
import torch model = torch.load('your_trained_model.pth') model.eval() # 切换到评估模式,关闭dropout等训练专属层 correct = 0 total = 0 with torch.no_grad(): # 关闭梯度计算,节省内存和计算资源 for images, labels in val_loader: outputs = model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() val_acc = correct / total print(f"验证准确率: {val_acc:.4f}")
二、训练时/训练后查看验证准确率的常规方法
为了避免以后再遇到这种遗漏记录的情况,推荐你在训练流程中做好以下操作:
1. 训练时实时记录并保存历史
训练模型时,一定要传入验证数据(或者设置训练集拆分比例),同时保存训练历史对象:
# TensorFlow/Keras示例 history = model.fit( x_train, y_train, epochs=50, batch_size=32, validation_data=(x_val, y_val) # 传入提前准备好的验证集 # 或者用validation_split=0.2自动从训练集拆分20%作为验证集 ) # 把训练历史保存到本地文件,方便后续随时查看 import json with open('training_history.json', 'w') as f: json.dump(history.history, f)
训练过程中控制台会自动输出每一轮的val_accuracy,训练结束后也可以从history对象中提取所有历史数据:
# 获取所有训练轮次的验证准确率 all_val_acc = history.history['val_accuracy'] # 获取最后一轮的验证准确率 final_val_acc = all_val_acc[-1] print(f"最后一轮验证准确率: {final_val_acc:.4f}")
2. 训练后从保存的历史文件查看
如果之前训练时已经保存了training_history.json,后续可以随时加载查看:
import json with open('training_history.json', 'r') as f: history_data = json.load(f) print("所有轮次的验证准确率:", history_data['val_accuracy']) print("最后一轮验证准确率:", history_data['val_accuracy'][-1])
内容的提问来源于stack exchange,提问作者Viper




