今天是参加昇思25天学习打卡营的第7天,今天打卡的课程是“模型训练”,这里做一个简单的分享。
1.简介
今天学习的内容是如何利用前面学习的知识来实现模型训练?
模型训练过程主要包括4个步骤:
- 构建数据集。
- 定义神经网络模型。
- 定义超参、损失函数及优化器。
- 输入数据集进行训练与评估。
2.构建数据集
构建数据集主要是通过的dataset来加载数据集,然后创建数据pipeline来组织管理数据。
3.定义神经网络模型
在前面的介绍中已经介绍过关于神经网络模型的定义,主要是基于mindspore.nn提供的类来进行创建。
4.定义超参、损失函数和优化器
4.1 超参
超参是模型训练过程中的控制参数,主要包括:
- 训练轮次(epoch):训练时遍历数据集的次数。
- 批次大小(batch size):数据集进行分批读取训练,设定每个批次数据的大小。batch size过小,花费时间多,同时梯度震荡严重,不利于收敛;batch size过大,不同batch的梯度方向没有任何变化,容易陷入局部极小值,因此需要选择合适的batch size,可以有效提高模型精度、全局收敛。
- 学习率(learning rate):如果学习率偏小,会导致收敛的速度变慢,如果学习率偏大,则可能会导致训练不收敛等不可预测的结果。梯度下降法被广泛应用在最小化模型误差的参数优化算法上。梯度下降法通过多次迭代,并在每一步中最小化损失函数来预估模型的参数。学习率就是在迭代过程中,会控制模型的学习进度。
4.2 损失函数
损失函数(loss function)用于评估模型的预测值(logits)和目标值(targets)之间的误差。常见的损失函数包括用于回归任务的nn.MSELoss
(均方误差)和用于分类的nn.NLLLoss
(负对数似然)等。 nn.CrossEntropyLoss
结合了nn.LogSoftmax
和nn.NLLLoss
,可以对logits 进行归一化并计算预测误差。
4.3 优化器
模型优化(Optimization)是在每个训练步骤中调整模型参数以减少模型误差的过程。MindSpore提供多种优化算法的实现,称之为优化器(Optimizer)。优化器内部定义了模型的参数优化过程(即梯度如何更新至模型参数),所有优化逻辑都封装在优化器对象中。
一个优化器的示例:
optimizer = nn.SGD(model.trainable_params(), learning_rate=learning_rate)
5.训练与评估
设置了超参、损失函数和优化器后,我们就可以循环输入数据来训练模型。一次数据集的完整迭代循环称为一轮(epoch)。每轮执行训练时包括两个步骤:
- 训练:迭代训练数据集,并尝试收敛到最佳参数。
- 验证/测试:迭代测试数据集,以检查模型性能是否提升。
6.小结
本节的模型训练过程是对前面知识的一个综合应用。通过本节的学习,需要掌握数据集的加载和组织、神经网络模型的定义和创建、超参概念及设置的方法、损失函数的设计、优化器的设置、模型训练、模型评估等整个流程。有了本次的基础,后续就可以开始逐步结合实际的问题来进行深入的学习了。
以上是第7天的学习内容,附上今日打卡记录: