学习目标:熟练掌握网络构建方法
- 了解
mindspore.nn - 实例构建简单的神经网络
- 网络模型中各层参数
昇思大模型平台 AI实验室 学习记录:

一、关于mindspore.nn
在MindSpore中,Cell类是构建所有网络的基类,也是网络的基本单元。cell:神经细胞,神经元。
1.1 基类:基本单元

1.2 卷积神经网络层-种类

1.3 循环神经网络层

1.4 非线性激活函数层


1.5 线性层

1.6 drop层

1.7归一化层

1.8 池化层

1.9 填充层padding

1.10 损失函数

1.11 优化器

1.12 评价指标:演练验证模型评估


1.13 动态学习率:学习率衰减函数

1.14 图像处理层

1.5 更多接口请参考官方文档介绍
mindspore.nn的接口介绍
二、实例构建简单神经网络
提示:这里可以添加计划学习的时间
# Begin to show your code!
import mindspore
from mindspore import nn, ops# 当我们定义神经网络时,可以继承nn.Cell类,在__init__方法中进行子Cell的实例化和状态管理,在construct方法中实现Tensor操作。
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"), # 权值初始化:normal-生成正态分布(高斯分布)的随机数nn.ReLU(),nn.Dense(512, 10, weight_init="normal", bias_init="zeros") # 十维的Tensor输出)def construct(self, x): # model.construct()方法不可直接调用。x = self.flatten(x)logits = self.dense_relu_sequential(x)return logitsif __name__ == "__main__":model = Network()print(model)X = ops.ones((1, 28, 28), mindspore.float32) # 构建一个28x28的输入logits = model(X)# print logitsprint(logits)pred_probab = nn.Softmax(axis=1)(logits)y_pred = pred_probab.argmax(1)print(f"Predicted class: {y_pred}") # 预测结果类别为Predicted class: [3]
运行结果:成功

注:打印网络模型参数-权重,如下:
print(f"Model structure: {model}\n\n")
for name, param in model.parameters_and_names():print(f"Layer: {name}\nSize: {param.shape}\nValues : {param[:2]} \n")
三、 网络模型中各层作用
提示:这里统计学习计划的总量
3.1 mindspore.nn.Flatten:对输入Tensor的第0维之外的维度进行展平操作。

3.2 线性全连接层:mindspore.nn.Dense

3.3 激活层:mindspore.nn.ReLU
将hidden中所有小于0的数值置0,大于0的不变。

3.4 系列神经元:mindspore.nn.SequentialCell
# showModelsParameter()
flatten = nn.Flatten()
layer1 = nn.Dense(in_channels=28 * 28, out_channels=20) # 全连接层-线性
relu = nn.ReLU()seq_modules = nn.SequentialCell(flatten,layer1,relu,nn.Dense(20, 10) # 输出层
)
# 输入
input_image = ops.ones((3, 28, 28), mindspore.float32)
# 输出
logits = seq_modules(input_image)
print(logits.shape)

3.5 输出: mindspore.nn.Softmax
使用nn.Softmax将神经网络最后一个全连接层返回的logits的值缩放为[0, 1],表示每个类别的预测概率。axis指定的维度数值和为1。

四、网络模型参数
打印网络模型的各层名称和权值参数
print(f"Model structure: {seq_modules}\n\n")
for name, param in seq_modules.parameters_and_names():print(f"Layer: {name}\nSize: {param.shape}\nValues : {param[:2]} \n")
