目录
目前已经完成了模型的构建和训练,我们最终的目的是将AI模型部署到STM32上运行,所以需要对模型进行一定的处理。接下来对模型的结果进行分析以及对模型进行优化。
在模型完成训练之后,会得到若干评估指标(如损失、准确率),以及训练过程中产生的一系列数据(训练损失、训练准确率、验证损失、验证准确率等)。对这些数据进行分析,能够帮助我们理解模型的学习情况并判断下一步需要做什么优化。
以下是一个详细的结果分析流程,可以更好地理解和运用这些指标。
1. 训练过程中的指标
在 Keras 中,通过调用 model.fit(...)
方法进行模型训练时,默认会输出以下信息:
- Epoch:表示训练轮次,如
Epoch 1/5
表示第 1 轮,总共 5 轮。 - loss(训练损失):这是当前这轮训练结束时,模型在 训练数据 上的损失值。
- accuracy(训练准确率):表示模型在 训练数据 上的准确率(对于分类问题)。
- val_loss(验证损失):这是当前这轮训练结束时,模型在 验证数据(validation set)上的损失值。
- val_accuracy(验证准确率):表示模型在 验证数据 上的准确率。
为什么要区分训练和验证?
- 训练集(train set):模型用来更新参数(学习)
- 验证集(validation set):模型不会直接用来更新参数,而是用来监控训练过程,防止过拟合,并进行模型调参(如选择合适的轮数、学习率等)。
一个典型的训练输出示例如下:
Epoch 1/5
844/844 [==============================] - 4s 5ms/step - loss: 0.3208 - accuracy: 0.9109 - val_loss: 0.1426 - val_accuracy: 0.9595
Epoch 2/5
844/844 [==============================] - 4s 5ms/step - loss: 0.1462 - accuracy: 0.9573 - val_loss: 0.1097 - val_accuracy: 0.9683
Epoch 3/5
844/844 [==============================] - 4s 5ms/step - loss: 0.1019 - accuracy: 0.9701 - val_loss: 0.0878 - val_accuracy: 0.9748
...
从上面的输出可以看到,每个 epoch 结束后,会打印以下信息:
- loss:本轮训练结束时的训练损失
- accuracy:本轮训练结束时的训练准确率
- val_loss:在验证集上测试的损失
- val_accuracy:在验证集上测试的准确率
2. 测试集上的指标
训练结束后,通常会调用:
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print("测试集上的准确率:", test_acc)
- test_loss:最终在 测试集 上的损失
- test_acc:最终在 测试集 上的准确率
为什么要单独使用测试集ÿ