赞
踩
目录
前置感受:总的来说,使用Mindspore创建一个基本的网络结构是简单容易的,在动态图测试本节内容的情况下,同pytorch的区别不是很大。静态图下的情况没有测试。
mindspore.nn — MindSpore master 文档
- import mindspore as ms
-
- ## 选动态图的配置
- ms.set_context(mode=ms.PYNATIVE_MODE) # 使用set_context进行动态图模式的配置
-
- ## 选静态图的配置
- ms.set_context(mode=ms.GRAPH_MODE) # 使用set_context进行运行静态图模式的配置
MindSpore中,Cell 类是构建所有网络的基类。如下代码,__init__
方法中进行子Cell的实例化和状态管理,在construct
方法中实现Tensor操作。model.construct()
方法不可直接调用。
如下网络结构:先将Tensor数据展平到28*28维,再构建 [512,28*28] 的全连接层权重矩阵,经过激活函数后,再构建 [512,512] 的全连接层权重矩阵,再次经过激活函数后,再构建 [512,10] 的全连接层权重矩阵后,输出,
- import mindspore
- from mindspore import nn, ops
-
- 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
-
- model = Network()
- print("查看模型网络结构:\n", model)
-
- X = ops.ones((1, 28, 28), mindspore.float32)
- logits = model(X)
- print("查看输入经过模型的输出值:\n", logits)
- print(type(logits)) # <class 'mindspore.common._stub_tensor.StubTensor'>
- print(logits.shape) # (1, 10)
-
- ## 获得预测概率
- pred_probab = nn.Softmax(axis=1)(logits)
- y_pred = pred_probab.argmax(1)
- print(f"Predicted class: {y_pred}")

mindspore.nn.Flatten : 沿着从 start_dim 到 end_dim 的维度,对输入Tensor进行展平。
- mindspore.nn.Flatten( start_dim=1, ## 要展平的第一个维度。默认 1 。
- end_dim=-1 ## 要展平的最后一个维度。默认 -1 。
- )
mindspore.nn.Dense :适用于输入的密集连接层,用权重和偏差对输入进行线性变换。
计算方式:y = activation(X * kernel + bias ) = 激活函数(输入数据 * 权重矩阵 + 偏置向量)
- mindspore.nn.Dense(in_channels, ## int,输入Tensor的空间维度
- out_channels, ## int,输出Tensor的空间维度
- weight_init=None, ## 默认 None,权重使用HeUniform初始化。
- bias_init=None, ## 默认 None,偏差使用Uniform初始化。
- has_bias=True, ## 默认 True, 使用偏置向量
- activation=None, ## 可指定激活函数名,如’relu’,或具体激活函数,如 mindspore.nn.ReLU 。默认 None
- dtype=mstype.float32)
mindspore.nn.ReLU : 逐元素计算ReLU(Rectified Linear Unit activation function)修正线性单元激活函数。
计算方式:ReLU(x)=max(0, x)
mindspore.nn.SequentialCell : 按照传入顺序依次添加神经网络 Cell, 可以通过初始化方式构建如下,也可像list一样通过 append(cell) 方式添加。
mindspore.nn.Softmax : 将多分类的结果以概率的形式展现出来,输出的数据类型和shape与输入的相同。
计算方式:
1
表示沿着第二个轴。网络内部神经网络层具有权重参数和偏置参数,如 nn.Dense,这些参数会在训练过程中不断进行优化,通过 model.parameters_and_names()
可获取参数名及对应的参数详情。
mindspore.nn.Cell :parameters_and_names(name_prefix='', expand=True) 返回Cell中parameter的迭代器。包含参数名称和参数本身。expand 为True 则递归地获取当前Cell和所有子Cell的参数及名称;如果为 False
,只生成当前Cell的子Cell的参数及名称。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。