1.全局流程
2.训练过程
损失函数:用来度量深度学习模型的预测值f(x)与真实标签值Y的差异程度的运算函数,损失函数越小,模型型训练的效果越好。
2.1 深度学习训练主要训练步骤:
- 确定模型
- 将模型加在到cpu或者gpu中
- 确定训练数据
- 确定优化器和超参
- model.train()
- 进入循环,将数据放到设备中
- 前向传播:就是将数据放到模型中训练
- 梯度清零:防止之前在优化器中存在之前的梯度,对当前的梯度有污染
- 计算损失:计算预测值与真实值之间的误差
- 反向传播:进行求导操作
- 更新参数
- 达到最优的结果之后就可以保存模型了
2.2 部分代码
1.定义模型
2.定义优化器和超参
下面进入循环训练模型
model.trian() # 开启训练模式
for i, data in enumerate(train_iter):
# 数据放到cpu或者gpu中
train_data = to_device(data, label_emberding)
# 前向传播:然后将要训练的数据放到模型中训练
output = model(train_data)
# 梯度清零:防止数据污染
optimier.zero_grad()
# 计算损失
loss = loss_fn(output, train_data['labelnum'])
# 反响传播:求导,找到更好的参数
loss.backward()
# 更新参数
optimier.step()
# 然后下面进入验证操作,根据验证集判断是否要继续进行下一步
.......
model.train()# 显示调用trian(),再次回到train状态
3.验证过程
3.1 验证主要步骤:
- model.eval
- 打开上下文管理器,禁止梯度计算
- 将数据加载到device
- 正向传播
- 汇总结果:因为是一个一个batch训练的,所以需要将所有的结果全部通过相关操作之后,将数据统一保存
- 计算评价指标
3.2 部分代码
model.eval()
# 打开上下文管理器,禁止梯度计算
with torch.no_gard()
for batch in dev_iter:
# 如果有数据就需要将数据加在到gpu
data=to_device(batch)
# 正向传播
out=model(data)
汇总所有相关的数据
.....
# 将所有汇总的结果进行评价指标计算
getscore(results)
4.测试过程
- 加载模型
- 重复验证的过程
最终查看评估结果,目的就是为验证模型的训练是否有效
5其他操作
- 分别计算每一个epoch训练集的loss和验证集的loss,就可以判断是否过拟合
- 计算每一步花了多少时间
- 早停机制
- 计算验证集的评价指标的一个变化过程