本文主要介绍如何使用MindSpore搭建一个简单的神经网络模型,然后就是展示在官方提。
基本介绍
神经网络模型的搭建是学习深度学习必不可少的,神经网络模型是由神经网络层和Tensor操作构成的。MindSpore的mindspore.nn模块提供了常见神经网络层的实现,有助于开发者快速搭建自己想要的模型,实现算法原型。在MindSpore中,Cell类是构建所有网络的基类,也是网络的基本单元,所有模型的搭建最好继承该基类。MindSpore中一个神经网络模型表示为一个Cell
,它由不同的子Cell
构成。使用这样的嵌套结构,可以简单地使用面向对象编程的思维,对神经网络结构进行构建和管理。
模型类
MindSpore定义一个模型时,最好继承nn.Cell类,并在__init__
方法中进行子Cell的实例化和状态管理,在construct
方法中实现Tensor操作(construct
意为神经网络(计算图)构建,相关内容详见使用静态图加速)。下面是一个简单的模型类代码示例:
class Network(nn.Cell):
def __init__(self):
super().__init__()
self.flatten = nn.Flatten()
self.dense_relu_sequential = nn.SequentialCell(
nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"),
nn.ReLU(),
nn.Dense(512, 512, weight_init="normal", bias_init="zeros"),
nn.ReLU(),
nn.Dense(512, 10, weight_init="normal", bias_init="zeros")
)
def construct(self, x):
x = self.flatten(x)
logits = self.dense_relu_sequential(x)
return logits
construct相当于前向计算,但不可直接调用。
模型层
MindSpore为开发者提供了各种各样的模型层,本小节对上述简单的模型类的模型层进行简单介绍
-
nn.Flatten:将多维张量展开成连续的一维张量
-
nn.Dense:全连接层,使用权重和偏差对输入进行线性变换
-
nn.ReLU:ReLU激活函数层,给网络中加入非线性的激活函数,帮助神经网络学习各种复杂的特征
-
nn.SequentialCell:一个有序的Cell容器,输入Tensor将按照定义的顺序通过所有Cell,可以使用
SequentialCell
来快速组合构造一个神经网络模型。如果神经网络模型中存在跳着计算的Cell,则无法使用该Cell容器 -
nn.Softmax:Softmax层,将神经网络最后一个全连接层返回的logits的值缩放为[0, 1],表示每个类别的预测概率,常用于多分类场景
Jupyter在线运行情况
使用MindSpore所提供的API搭建了一个简单的神经网络模型,并进行运行,然后查看模型相关的结构和参数,其运行结果如下:
MindSpore在搭建模型这方面的设计和其他AI框架差不多,上手简单快速。从今天的实践学习来看,MindSpore在接口名称和其他AI框架有些不同,模型层差不多,但是模型类的一些方法有些与众不同,应该是尤其独特的设计理念。