Fasttext 优化 - 调整训练轮数和学习率
1 课程概览
本课讲解 Fasttext 优化手段二和三:调整训练轮数和学习率。默认训练 5 轮,增加到 25 轮后精度从 0.17 提升到 0.42。调整学习率(lr)也能提升精度。方法简单:复制粘贴代码,修改参数即可。
2 核心概念与定义
- 训练轮数(epoch):默认 5 轮,增加到 25 轮。
- 学习率(lr):控制梯度下降步长。
3 模型与算法详解
优化手段二:增加训练轮数
默认 5 轮,增加到 25 轮,精度从 0.17 提升到 0.42。
| 参数 | 默认值 | 调整后 | 效果 |
|---|---|---|---|
| epoch | 5 | 25 | 0.17 → 0.42 |
优化手段三:调整学习率
调整学习率(lr)也能提升精度。
| 参数 | 说明 |
|---|---|
| lr | 学习率,控制梯度下降步长 |
训练时间
轮数增加,训练时间变长。
- 轮数多,训练慢
- 但比传统模型(RNN、LSTM)快很多
4 数学原理与推导
梯度下降
$$\theta = \theta - \text{lr} \cdot \nabla L(\theta)$$
其中:
- $\theta$ 是参数
- $\text{lr}$ 是学习率
- $\nabla L(\theta)$ 是梯度
5 代码示例
import fasttext
def dm03_epoch():
"""优化手段二:增加训练轮数"""
# 在上部基础上增加训练轮数(默认 5 轮,改为 25 轮)
model = fasttext.train_supervised(
input="data/cooking_pre_train.txt",
epoch=25, # 训练轮数:5 → 25
lr=1.0, # 学习率
wordNgrams=2 # n-gram 特征
)
# 评估
metrics = model.test("data/cooking_pre_validate.txt")
print(f"Precision@1: {metrics[1]}") # 0.42
return model
def dm04_lr():
"""优化手段三:调整学习率"""
# 在上部基础上调整学习率
model = fasttext.train_supervised(
input="data/cooking_pre_train.txt",
epoch=25, # 训练轮数
lr=0.5, # 学习率:1.0 → 0.5
wordNgrams=2 # n-gram 特征
)
# 评估
metrics = model.test("data/cooking_pre_validate.txt")
print(f"Precision@1: {metrics[1]}")
return model
# 测试
if __name__ == "__main__":
print("=== 优化手段二:增加训练轮数 ===")
model1 = dm03_epoch()
print("\n=== 优化手段三:调整学习率 ===")
model2 = dm04_lr()
代码说明
| 代码 | 说明 |
|---|---|
epoch=25 | 训练轮数:5 → 25 |
lr=0.5 | 学习率调整 |
model.test() | 评估模型 |
6 重难点与易错提醒
- ❗重点:增加训练轮数能显著提升精度(0.17 → 0.42)。
- ❗重点:调整学习率也能提升精度。
- ⚠️易错:轮数增加,训练时间变长。
- 💡技巧:复制粘贴代码,修改参数即可。
7 课堂问答精选
Q1:如何增加训练轮数?
A:在 train_supervised() 中设置 epoch=25(默认 5 轮)。精度从 0.17 提升到 0.42。
Q2:如何调整学习率?
A:在 train_supervised() 中设置 lr=0.5(或其他值)。学习率控制梯度下降步长。
Q3:增加训练轮数有什么影响?
A:精度提升,但训练时间变长。不过比传统模型(RNN、LSTM)快很多。
8 本课小结
- 优化手段二:增加训练轮数(epoch=25),精度 0.17 → 0.42。
- 优化手段三:调整学习率(lr)。
- 方法简单:复制粘贴代码,修改参数。
9 延伸思考
- 如何调整 n-gram 和损失函数?
- 如何自动调参?