日期
心得
什么是函数式自动微分,在日常的模型训练中,涉及到复杂的数学公式如何转换为机械语言,通过本次的学习,使我了解到了如何去做梯度计算,通过梯度计算,设计损失函数,有一步步优化代码。
昇思MindSpore 基础入门学习 函数式自动微分 (AI 代码解析)
函数式自动微分
神经网络的训练主要使用反向传播算法,模型预测值(logits)与正确标签(label)送入损失函数(loss function)获得loss,然后进行反向传播计算,求得梯度(gradients),最终更新至模型参数(parameters)。自动微分能够计算可导函数在某点处的导数值,是反向传播算法的一般化。自动微分主要解决的问题是将一个复杂的数学运算分解为一系列简单的基本运算,该功能对用户屏蔽了大量的求导细节和过程,大大降低了框架的使用门槛。
MindSpore使用函数式自动微分的设计理念,提供更接近于数学语义的自动微分接口grad
和value_and_grad
。下面我们使用一个简单的单层线性变换模型进行介绍。
import numpy as np
import mindspore
from mindspore import nn
from mindspore import ops
from mindspore import Tensor, Parameter
import numpy as np
:- 这行代码导入了NumPy库,并将其命名为
np
。NumPy是一个强大的Python库,用于进行科学计算,特别是数组操作。
- 这行代码导入了NumPy库,并将其命名为
import mindspore
:- 这行代码导入了MindSpore库。MindSpore是华为开发的一个深度学习框架,旨在提供高效、灵活的AI模型开发和部署。
from mindspore import nn
:- 这行代码从MindSpore库中导入了神经网络模块
nn
。nn
模块包含了构建神经网络所需的各种层和函数。
- 这行代码从MindSpore库中导入了神经网络模块
from mindspore import ops
:- 这行代码从MindSpore库中导入了操作模块
ops
。ops
模块包含了各种用于张量操作的函数,如数学运算、逻辑运算等。
- 这行代码从MindSpore库中导入了操作模块
from mindspore import Tensor, Parameter
:- 这行代码从MindSpore库中导入了
Tensor
和Parameter
类。Tensor
是MindSpore中的基本数据结构,类似于NumPy的数组,用于存储和操作多维数据。Parameter
用于定义神经网络中的可训练参数。
- 这行代码从MindSpore库中导入了
mindspore.nn
:- 该模块提供了构建神经网络的各种组件,如层(例如全连接层、卷积层)、损失函数、优化器等。
mindspore.ops
:- 该模块提供了各种张量操作函数,包括数学运算、逻辑运算、形状操作等。
mindspore.Tensor
:- 该类用于创建和操作多维数组,是MindSpore中的基本数据结构。
mindspore.Parameter
:- 该类用于定义神经网络中的可训练参数,这些参数在训练过程中会被优化。
函数与计算图
计算图是用图论语言表示数学函数的一种方式,也是深度学习框架表达神经网络模型的统一方法。我们将根据下面的计算图构造计算函数和神经网络。
在这个模型中,x