全球人名分类案例 - 三种模型可视化
1 课程概览
本课绘制三种模型(RNN、LSTM、GRU)的效果对比图,包括损失对比曲线、准确率对比曲线、用时对比图。可视化代码可以不写(复制粘贴使用),但模型训练代码必须自己写。绘制三张图是作业要求。
2 核心概念与定义
- 可视化(Visualization):用图表展示模型训练效果。
- 收敛速度(Convergence Speed):损失下降的快慢,反映模型学习速度。
- 性能指标(Performance Metrics):损失列表、训练总耗时、准确率列表。
3 模型与算法详解
三张对比图
| 图表 | X 轴 | Y 轴 | 评估内容 |
|---|---|---|---|
| 损失对比曲线 | 训练步数 | 平均损失 | 收敛速度 |
| 准确率对比曲线 | 训练步数 | 准确率 | 分类效果 |
| 用时对比图 | 模型名称 | 训练时间 | 训练效率 |
性能指标
每个模型训练后返回 3 个指标:
| 指标 | 变量名 | 说明 |
|---|---|---|
| 损失列表 | total_loss_list | 每 100 步的平均损失 |
| 训练总耗时 | total_time | 训练总时间 |
| 准确率列表 | total_acc_list | 每 2000 步的准确率 |
预期结果
| 模型 | 损失 | 准确率 | 训练时间 |
|---|---|---|---|
| RNN | 最低 | 最低 | 最短 |
| LSTM | 最高 | 最高 | 最长 |
| GRU | 中间 | 中间 | 中间 |
绘图流程
- 训练三种模型:获取性能指标
- 创建画布:
plt.figure(figsize=(15, 8)) - 绘制曲线:
plt.plot() - 设置图表属性:标题、X 轴标签、Y 轴标签
- 添加网格:
plt.grid(True, linestyle='--', alpha=0.7) - 显示图例:
plt.legend() - 显示图表:
plt.show()
优化建议
将训练结果保存到文件,下次直接读取,避免重复训练。
- 训练三个模型约需 3 分钟
- 建议将结果保存到文件,避免每次重新训练
4 数学原理与推导
本课为可视化绘图,无数学推导。
5 代码示例
import matplotlib.pyplot as plt
def dm_test_train_rnn_lstm_gru():
# 1. 训练三种模型,获取性能指标
# 返回值:损失列表, 准确率列表, 训练总耗时
total_loss_list_rnn, total_acc_list_rnn, total_time_rnn = dm_train_rnn()
total_loss_list_lstm, total_acc_list_lstm, total_time_lstm = dm_train_lstm()
total_loss_list_gru, total_acc_list_gru, total_time_gru = dm_train_gru()
# ========== 2. 绘制损失对比曲线 ==========
# 2.1 创建画布
plt.figure(figsize=(15, 8))
# 2.2 绘制各模型损失曲线
plt.plot(total_loss_list_rnn, label='RNN')
plt.plot(total_loss_list_lstm, label='LSTM')
plt.plot(total_loss_list_gru, label='GRU')
# 2.3 设置图表属性
plt.title('模型损失对比曲线')
plt.xlabel('训练步数(每100步)')
plt.ylabel('平均损失')
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend()
plt.show()
# ========== 3. 绘制准确率对比曲线 ==========
plt.figure(figsize=(15, 8))
plt.plot(total_acc_list_rnn, label='RNN')
plt.plot(total_acc_list_lstm, label='LSTM')
plt.plot(total_acc_list_gru, label='GRU')
plt.title('模型准确率对比曲线')
plt.xlabel('训练步数(每2000步)')
plt.ylabel('准确率')
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend()
plt.show()
# ========== 4. 绘制用时对比图 ==========
plt.figure(figsize=(10, 6))
models = ['RNN', 'LSTM', 'GRU']
times = [total_time_rnn, total_time_lstm, total_time_gru]
plt.bar(models, times)
plt.title('模型训练用时对比')
plt.xlabel('模型')
plt.ylabel('训练时间(秒)')
plt.grid(True, linestyle='--', alpha=0.7)
# 在柱状图上显示数值
for i, v in enumerate(times):
plt.text(i, v + 0.5, f'{v:.2f}s', ha='center')
plt.show()
# 运行可视化
dm_test_train_rnn_lstm_gru()
绘图参数说明
| 参数 | 值 | 说明 |
|---|---|---|
| figsize | (15, 8) | 画布大小 |
| grid | True | 显示网格 |
| linestyle | '--' | 虚线 |
| alpha | 0.7 | 透明度 |
6 重难点与易错提醒
- ❗重点:三张对比图——损失对比、准确率对比、用时对比。
- ❗重点:可视化代码可以不写,但模型训练代码必须自己写。
- ⚠️易错:绘图参数最好一遍过,避免反复运行(每次需 3 分钟)。
- 💡深入理解:将训练结果保存到文件,避免重复训练。
- 💡深入理解:损失下降越快,收敛速度越快。
7 课堂问答精选
Q1:需要绘制哪三张对比图?
A:①损失对比曲线(评估收敛速度);②准确率对比曲线(评估分类效果);③用时对比图(评估训练效率)。
Q2:可视化代码需要自己写吗?
A:可视化代码可以不写,复制粘贴使用即可。但模型训练代码必须自己写,并绘制出三张图作为作业。
Q3:为什么绘图参数最好一遍过?
A:因为每次运行可视化代码,都需要重新训练三个模型(约 3 分钟)。如果为了改一个参数而重新运行,非常耗时。建议将训练结果保存到文件,避免重复训练。
Q4:三个模型的预期效果是什么?
A:RNN 损失最低、准确率最低、训练时间最短;LSTM 损失最高、准确率最高、训练时间最长;GRU 介于两者之间。
8 本课小结
- 三张对比图:损失对比、准确率对比、用时对比。
- 性能指标:损失列表、训练总耗时、准确率列表。
- 可视化代码可复制粘贴,模型训练代码必须自己写。
- 绘图参数最好一遍过,避免反复运行。
- 建议将训练结果保存到文件,避免重复训练。
9 延伸思考
- 如何将训练结果保存到文件以便复用?
- 除了这三张图,还有哪些指标可以评估模型效果?