今天是参加昇思25天学习打卡营的第7天,今天打卡的课程是“模型训练”,这里做一个简单的分享。

1.简介

今天学习的内容是如何利用前面学习的知识来实现模型训练?

模型训练过程主要包括4个步骤:

  1. 构建数据集。
  2. 定义神经网络模型。
  3. 定义超参、损失函数及优化器。
  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.LogSoftmaxnn.NLLLoss,可以对logits 进行归一化并计算预测误差。

4.3 优化器

模型优化(Optimization)是在每个训练步骤中调整模型参数以减少模型误差的过程。MindSpore提供多种优化算法的实现,称之为优化器(Optimizer)。优化器内部定义了模型的参数优化过程(即梯度如何更新至模型参数),所有优化逻辑都封装在优化器对象中。

一个优化器的示例:

optimizer = nn.SGD(model.trainable_params(), learning_rate=learning_rate)

5.训练与评估

设置了超参、损失函数和优化器后,我们就可以循环输入数据来训练模型。一次数据集的完整迭代循环称为一轮(epoch)。每轮执行训练时包括两个步骤:

  1. 训练:迭代训练数据集,并尝试收敛到最佳参数。
  2. 验证/测试:迭代测试数据集,以检查模型性能是否提升。

6.小结

本节的模型训练过程是对前面知识的一个综合应用。通过本节的学习,需要掌握数据集的加载和组织、神经网络模型的定义和创建、超参概念及设置的方法、损失函数的设计、优化器的设置、模型训练、模型评估等整个流程。有了本次的基础,后续就可以开始逐步结合实际的问题来进行深入的学习了。

以上是第7天的学习内容,附上今日打卡记录:
在这里插入图片描述

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐