学习目标:熟练掌握网络构建方法
- 了解
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 logits
if __name__ == "__main__":
model = Network()
print(model)
X = ops.ones((1, 28, 28), mindspore.float32) # 构建一个28x28的输入
logits = model(X)
# print logits
print(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")